XMLHttpRequest API
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
* Some parts of this feature may have varying levels of support.
Note: This feature is available in Web Workers, except for Service Workers.
XMLHttpRequest API cho phép các ứng dụng web gửi yêu cầu HTTP đến máy chủ web và nhận phản hồi theo cách có thể lập trình bằng JavaScript. Nhờ đó, một trang web có thể cập nhật chỉ một phần của trang bằng dữ liệu từ máy chủ, thay vì phải điều hướng sang một trang hoàn toàn mới. Thực hành này đôi khi còn được gọi là AJAX.
Fetch API là giải pháp thay thế linh hoạt và mạnh mẽ hơn cho XMLHttpRequest API. Fetch API dùng promises thay vì sự kiện để xử lý phản hồi bất đồng bộ, tích hợp tốt với service workers, và hỗ trợ các khía cạnh nâng cao của HTTP như CORS. Vì những lý do này, Fetch API thường được dùng trong các ứng dụng web hiện đại thay cho XMLHttpRequest.
Khái niệm và cách dùng
Giao diện trung tâm trong XMLHttpRequest API là XMLHttpRequest. Để tạo một yêu cầu HTTP:
- Tạo một thể hiện
XMLHttpRequestmới bằng cách gọi constructor của nó. - Khởi tạo nó bằng cách gọi
XMLHttpRequest.open(). Tại đây bạn cung cấp URL cho yêu cầu, phương thức HTTP cần dùng, và tùy chọn tên người dùng cùng mật khẩu. - Gắn các bộ xử lý sự kiện để nhận kết quả của yêu cầu. Ví dụ, sự kiện
loadđược kích hoạt khi yêu cầu hoàn tất thành công, còn sự kiệnerrorđược kích hoạt trong nhiều điều kiện lỗi khác nhau. - Gửi yêu cầu bằng cách gọi
XMLHttpRequest.send().
Để xem hướng dẫn chi tiết về XMLHttpRequest API, hãy xem Using XMLHttpRequest.
Giao diện
FormData-
Đối tượng biểu diễn các trường và giá trị của
<form>, có thể gửi đến máy chủ bằngXMLHttpRequesthoặcfetch(). ProgressEvent-
Một lớp con của
Eventđược truyền vào sự kiệnprogress, và chứa thông tin về lượng yêu cầu đã hoàn tất. XMLHttpRequest-
Đại diện cho một yêu cầu HTTP đơn lẻ.
XMLHttpRequestEventTarget-
Lớp cha của cả
XMLHttpRequestvàXMLHttpRequestUpload, định nghĩa các sự kiện có sẵn trong cả hai giao diện này. XMLHttpRequestUpload-
Đại diện cho tiến trình tải lên của một upload HTTP. Cung cấp các sự kiện để theo dõi tiến trình tải lên.
Ví dụ
>Lấy dữ liệu JSON từ máy chủ
Trong ví dụ này, chúng ta lấy một tệp JSON từ https://raw.githubusercontent.com/mdn/content/main/files/en-us/_wikihistory.json, đồng thời thêm các bộ lắng nghe sự kiện để hiển thị tiến trình.
HTML
<div class="controls">
<button class="xhr" type="button">Click to start XHR</button>
</div>
<textarea readonly class="event-log"></textarea>
JavaScript
const xhrButton = document.querySelector(".xhr");
const log = document.querySelector(".event-log");
const url =
"https://raw.githubusercontent.com/mdn/content/main/files/en-us/_wikihistory.json";
function handleEvent(e) {
log.textContent = `${log.textContent}${e.type}: ${e.loaded} bytes transferred\n`;
}
function addListeners(xhr) {
xhr.addEventListener("loadstart", handleEvent);
xhr.addEventListener("load", handleEvent);
xhr.addEventListener("loadend", handleEvent);
xhr.addEventListener("progress", handleEvent);
xhr.addEventListener("error", handleEvent);
xhr.addEventListener("abort", handleEvent);
}
xhrButton.addEventListener("click", () => {
log.textContent = "";
const xhr = new XMLHttpRequest();
xhr.open("GET", url);
addListeners(xhr);
xhr.send();
});
Kết quả
Thông số kỹ thuật
| Specification |
|---|
| XMLHttpRequest> |