Hướng dẫn XML

TRANG CHỦ XML Giới thiệu XML Cách sử dụng XML Cây XML Cú pháp XML Phần tử XML Thuộc tính XML Không gian tên XML Hiển thị XML HttpRequest XML Trình phân tích cú pháp XML DOM XML XPath XML XSLT XML XQuery XML XML XLink Trình xác thực XML DTD XML Lược đồ XML Máy chủ XML Ví dụ về XML Câu đố XML Chứng chỉ XML

XML AJAX

Giới thiệu AJAX AJAX XMLHttp Yêu cầu AJAX Phản hồi AJAX Tệp XML AJAX AJAX PHP AJAX ASP Cơ sở dữ liệu AJAX Ứng dụng AJAX Ví dụ về AJAX

DOM XML

Giới thiệu DOM Nút DOM Truy cập DOM Thông tin nút DOM Danh sách nút DOM DOM Traversing Điều hướng DOM DOM Nhận giá trị Nút thay đổi DOM DOM Xóa các nút Nút thay thế DOM DOM Tạo nút DOM Thêm nút Nút nhân bản DOM Ví dụ về DOM

Hướng dẫn XPath

Giới thiệu XPath Nút XPath Cú pháp XPath Trục XPath Toán tử XPath Ví dụ về XPath

Hướng dẫn XSLT

Giới thiệu XSLT Ngôn ngữ XSL Chuyển đổi XSLT XSLT <template> XSLT <value-of> XSLT <for-each> XSLT <sắp xếp> XSLT <if> XSLT <chọn> Áp dụng XSLT XSLT trên máy khách XSLT trên Máy chủ XSLT Chỉnh sửa XML Ví dụ về XSLT

Hướng dẫn XQuery

Giới thiệu XQuery Ví dụ về XQuery XQuery FLWOR HTML XQuery Điều khoản XQuery Cú pháp XQuery XQuery Thêm Chọn XQuery Hàm XQuery

DTD XML

Giới thiệu DTD Khối xây dựng DTD Phần tử DTD Các thuộc tính DTD Phần tử DTD so với Attr Thực thể DTD Ví dụ về DTD

Lược đồ XSD

Giới thiệu XSD XSD Cách thực hiện XSD <schema> Phần tử XSD Thuộc tính XSD Hạn chế XSD

XSD Complex

Phần tử XSD XSD trống Chỉ các phần tử XSD Chỉ văn bản XSD XSD hỗn hợp Chỉ báo XSD XSD <nhiều> XSD <anyAttribute> Thay thế XSD Ví dụ về XSD

Dữ liệu XSD

Chuỗi XSD Ngày XSD XSD Numeric XSD Misc Tham chiếu XSD

Dịch vụ web

Dịch vụ XML WSDL XML SOAP XML RDF XML RSS XML

Người giới thiệu

Các loại nút DOM Nút DOM DOM NodeList DOM NamedNodeMap Tài liệu DOM Phần tử DOM Thuộc tính DOM Văn bản DOM DOM CDATA Bình luận DOM DOM XMLHttpRequest Trình phân tích cú pháp DOM Phần tử XSLT Hàm XSLT / XPath

AJAX - Gửi yêu cầu đến máy chủ


Đối tượng XMLHttpRequest được sử dụng để trao đổi dữ liệu với máy chủ.


Gửi yêu cầu đến máy chủ

Để gửi yêu cầu đến máy chủ, chúng tôi sử dụng phương thức open () và send () của đối tượng XMLHttpRequest:

xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();
Method Description
open(method, url, async) Specifies the type of request

method: the type of request: GET or POST
url: the server (file) location
async: true (asynchronous) or false (synchronous)
send() Sends the request to the server (used for GET)
send(string) Sends the request to the server (used for POST)

NHẬN hay ĐĂNG?

GET đơn giản hơn và nhanh hơn POST và có thể được sử dụng trong hầu hết các trường hợp.

Tuy nhiên, hãy luôn sử dụng yêu cầu ĐĂNG khi:

  • Tệp được lưu trong bộ nhớ cache không phải là một tùy chọn (cập nhật tệp hoặc cơ sở dữ liệu trên máy chủ).
  • Gửi một lượng lớn dữ liệu đến máy chủ (POST không có giới hạn về kích thước).
  • Gửi thông tin đầu vào của người dùng (có thể chứa các ký tự không xác định), POST mạnh mẽ và an toàn hơn GET.

NHẬN Yêu cầu

Một yêu cầu GET đơn giản:

Thí dụ

xhttp.open("GET", "demo_get.asp", true);
xhttp.send();

Trong ví dụ trên, bạn có thể nhận được một kết quả được lưu trong bộ nhớ cache. Để tránh điều này, hãy thêm một ID duy nhất vào URL:

Thí dụ

xhttp.open("GET", "demo_get.asp?t=" + Math.random(), true);
xhttp.send();

Nếu bạn muốn gửi thông tin bằng phương thức GET, hãy thêm thông tin vào URL:

Thí dụ

xhttp.open("GET", "demo_get2.asp?fname=Henry&lname=Ford", true);
xhttp.send();


ĐĂNG yêu cầu

Một yêu cầu ĐĂNG đơn giản:

Thí dụ

xhttp.open("POST", "demo_post.asp", true);
xhttp.send();

Để ĐĂNG dữ liệu như biểu mẫu HTML, hãy thêm tiêu đề HTTP với setRequestHeader (). Chỉ định dữ liệu bạn muốn gửi trong phương thức send ():

Thí dụ

xhttp.open("POST", "demo_post2.asp", true);
xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhttp.send("fname=Henry&lname=Ford");
Method Description
setRequestHeader(header, value) Adds HTTP headers to the request

header: specifies the header name
value: specifies the header value

Url - Tệp trên máy chủ

Tham số url của phương thức open (), là địa chỉ của tệp trên máy chủ:

xhttp.open("GET", "ajax_test.asp", true);

Tệp có thể là bất kỳ loại tệp nào, như .txt và .xml hoặc tệp kịch bản máy chủ như .asp và .php (có thể thực hiện các hành động trên máy chủ trước khi gửi phản hồi trở lại).


Không đồng bộ - Đúng hay Sai?

Yêu cầu máy chủ phải được gửi không đồng bộ.

Tham số async của phương thức open () phải được đặt thành true:

xhttp.open("GET", "ajax_test.asp", true);

Bằng cách gửi không đồng bộ, JavaScript không phải đợi phản hồi của máy chủ mà thay vào đó có thể:

  • thực thi các tập lệnh khác trong khi chờ phản hồi của máy chủ
  • xử lý phản hồi sau khi phản hồi đã sẵn sàng

Thuộc tính onreadystatechange

Với đối tượng XMLHttpRequest, bạn có thể xác định một hàm sẽ được thực thi khi yêu cầu nhận được câu trả lời.

Hàm được định nghĩa trong thuộc tính onreadystatechange của đối tượng XMLHttpResponse:

Thí dụ

xhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    document.getElementById("demo").innerHTML = this.responseText;
  }
};
xhttp.open("GET", "ajax_info.txt", true);
xhttp.send();

Tệp "ajax_info.txt" được sử dụng trong ví dụ trên, là một tệp văn bản đơn giản và trông giống như sau:

<h1>AJAX</h1>
<p>AJAX is not a programming language.</p>
<p>AJAX is a technique for accessing web servers from a web page.</p>
<p>AJAX stands for Asynchronous JavaScript And XML.</p>

Bạn sẽ tìm hiểu thêm về onreadystatechange trong chương sau.


Yêu cầu đồng bộ

Để thực hiện một yêu cầu đồng bộ, hãy thay đổi tham số thứ ba trong phương thức open () thành false:

xhttp.open("GET", "ajax_info.txt", false);

Đôi khi async = false được sử dụng để kiểm tra nhanh. Bạn cũng sẽ tìm thấy các yêu cầu đồng bộ trong mã JavaScript cũ hơn.

Vì mã sẽ đợi máy chủ hoàn thành, nên không cần hàm onreadystatechange:

Thí dụ

xhttp.open("GET", "ajax_info.txt", false);
xhttp.send();
document.getElementById("demo").innerHTML = xhttp.responseText;

Không nên sử dụng XMLHttpRequest đồng bộ (async = false) vì JavaScript sẽ ngừng thực thi cho đến khi phản hồi của máy chủ sẵn sàng. Nếu máy chủ bận hoặc chậm, ứng dụng sẽ bị treo hoặc dừng.

Synchronous XMLHttpRequest đang trong quá trình bị xóa khỏi tiêu chuẩn web, nhưng quá trình này có thể mất nhiều năm.

Các công cụ dành cho nhà phát triển hiện đại được khuyến khích để cảnh báo về việc sử dụng các yêu cầu đồng bộ và có thể đưa ra ngoại lệ InvalidAccessError khi nó xảy ra.