API XMLHttpRequest
Базовая Широко поддерживается *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
* Некоторые части этой функции могут иметь разный уровень поддержки.
Примечание: Эта функция доступна в Потоках Web Workers, за исключением Сервисных рабочих процессов.
API XMLHttpRequest позволяет веб-приложениям отправлять HTTP-запросы веб-серверам и получать ответы программно с помощью JavaScript. Это, в свою очередь, позволяет обновлять только часть страницы данными с сервера, а не переходить на совершенно новую страницу. Этот подход также иногда называют AJAX.
API Fetch — это более гибкое и мощное решение, заменяющее API XMLHttpRequest. Fetch API использует объекты Promise вместо событий для обработки асинхронных ответов, хорошо интегрируется с сервисными рабочими процессами и поддерживает расширенные аспекты HTTP, такие как CORS. По этим причинам API Fetch обычно используется в современных веб-приложениях вместо XMLHttpRequest.
Основные концепции и использование
Основной интерфейс в API XMLHttpRequest — XMLHttpRequest. Для отправки HTTP-запроса:
- Создайте новый экземпляр
XMLHttpRequestвызвав его конструктор. - Инициализируйте его, вызвав
XMLHttpRequest.open(). На этом этапе вы предоставляете URL для запроса, HTTP-метод, а также необязательно имя пользователя и пароль. - Прикрепите обработчики событий для получения результата запроса. Например, событие
loadсрабатывает при успешном завершении запроса, а событиеerrorсрабатывает при различных ошибках. - Отправьте запрос, вызвав
XMLHttpRequest.send().
Более подробное руководство по API XMLHttpRequest см. в разделе Использование XMLHttpRequest.
Интерфейсы
FormData-
Объект, представляющий поля
<form>и их значения, которые можно отправлять на сервер с помощьюXMLHttpRequestилиfetch(). ProgressEvent-
Подкласс
Event, который передается вprogressи содержит информацию о том, какая часть запроса была выполнена. XMLHttpRequest-
Представляет один HTTP-запрос.
XMLHttpRequestEventTarget-
Базовый класс как для
XMLHttpRequest, так и дляXMLHttpRequestUpload, определяющий доступные события в обоих интерфейсах. XMLHttpRequestUpload-
Представляет процесс загрузки для HTTP-загрузки. Предоставляет события, позволяющие отслеживать процесс загрузки.
Примеры
Получение данных JSON с сервера
В этом примере мы получаем файл JSON с https://raw.githubusercontent.com/mdn/content/main/files/en-us/_wikihistory.json, добавляя обработчики событий для отображения прогресса.
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();
});
Результат
Спецификации
| Спецификация |
|---|
| XMLHttpRequest |
Совместимость браузеров
| Настольный | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
XMLHttpRequest |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
XMLHttpRequest_API |
1 | 12 | 1 | 8 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | ≤37 |
abort |
1 | 12 | 1 | ≤12.1 | 1.2 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
abort_event |
1 | 12 | 3.5 | ≤12.1 | 1.3 | 18 | 4 | ≤12.1 | 1 | 1.0 | ≤37 |
authorization_removed_cross_origin |
Нет | Нет | 111 | Нет | 16.1 | Нет | 111 | Нет | 16.1 | Нет | Нет |
error_event |
1 | 12 | 1 | ≤12.1 | 1.3 | 18 | 4 | ≤12.1 | 1 | 1.0 | ≤37 |
getAllResponseHeaders |
1 | 12 | 1Начиная с Firefox 49, пустые заголовки возвращаются как пустые строки, если параметрnetwork.http.keep_empty_response_headers_as_empty_string установлен в true, по умолчанию false. До Firefox 49 пустые заголовки игнорировались. Начиная с Firefox 50, параметр по умолчанию true. |
≤12.1 | 1.2 | 18 | 4Начиная с Firefox для Android 49, пустые заголовки возвращаются как пустые строки, если параметрnetwork.http.keep_empty_response_headers_as_empty_string установлен в true, по умолчанию false. До Firefox для Android 49 пустые заголовки игнорировались. Начиная с Firefox для Android 50, параметр по умолчанию true. |
≤12.1 | 1 | 1.0 | 4.4 |
getResponseHeader |
1 | 12 | 1Начиная с Firefox 49, пустые заголовки возвращаются как пустые строки, если параметрnetwork.http.keep_empty_response_headers_as_empty_string установлен в true, по умолчанию false. До Firefox 49 пустые заголовки игнорировались. Начиная с Firefox 50, параметр по умолчанию true. |
8 | 1.2 | 18 | 4Начиная с Firefox для Android 49, пустые заголовки возвращаются как пустые строки, если параметрnetwork.http.keep_empty_response_headers_as_empty_string установлен в true, по умолчанию false. До Firefox для Android 49 пустые заголовки игнорировались. Начиная с Firefox для Android 50, параметр по умолчанию true. |
10.1 | 1 | 1.0 | 4.4 |
load_event |
1 | 12 | 1 | ≤12.1 | 1.3 | 18 | 4 | ≤12.1 | 1 | 1.0 | ≤37 |
loadend_event |
18 | 12 | 5 | ≤12.1 | 4 | 18 | 5 | ≤12.1 | 3 | 1.0 | 4.4 |
loadstart_event |
1 | 12 | 3.5 | ≤12.1 | 1.3 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
open |
1 | 12 | 1Начиная с Firefox 30, синхронные запросы в основном потоке устарели из-за их негативного влияния на производительность и пользовательский опыт. Поэтому параметрasync не может быть false за исключением Worker. |
8 | 1.2 | 18 | 4Начиная с Firefox для Android 30, синхронные запросы в основном потоке устарели из-за их негативного влияния на производительность и пользовательский опыт. Поэтому параметрasync не может быть false за исключением Worker. |
10.1 | 1 | 1.0 | 4.4 |
overrideMimeType |
1 | 12 | 1 | ≤12.1 | 1.2 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
progress_event |
1 | 12 | 1 | ≤12.1 | 3 | 18 | 4 | ≤12.1 | 1 | 1.0 | ≤37 |
readyState |
1 | 12 | 1 | 8 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
readystatechange_event |
1 | 12 | 1 | 9 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
response |
9 | 12 | 6 | 11.6 | 5.1 | 18 | 6 | 12 | 5 | 1.0 | 3 |
responseText |
1 | 12 | 1 | 8 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
responseType |
31 | 12 | 6 | 1812–15 | 5.1 | 31 | 50 | 1812–14 | 5 | 2.0 | 4.4.3 |
responseURL |
37 | 14 | 32 | 24 | 8 | 37 | 32 | 24 | 8 | 3.0 | 37 |
responseXML |
1 | 12 | 1До Firefox 51, ошибка при разборе полученных данных добавляла узел<parsererror> в начало Document и затем возвращала Document в любом состоянии. Это не соответствовало спецификации. Начиная с Firefox 51, этот сценарий теперь правильно возвращает null в соответствии со спецификацией. |
≤12.1 | 3 | 18 | 4До Firefox для Android 51, ошибка при разборе полученных данных добавляла узел<parsererror> в начало Document и затем возвращала Document в любом состоянии. Это не соответствовало спецификации. Начиная с Firefox для Android 51, этот сценарий теперь правильно возвращает null в соответствии со спецификацией. |
≤12.1 | 1 | 1.0 | ≤37 |
|---|---|---|---|---|---|---|---|---|---|---|---|
send |
1 | 12 | 1 | 8 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
setAttributionReporting |
125 | 125 | Нет | 111 | Нет | 125 | Нет | 83 | Нет | 27.0 | 125 |
setPrivateToken |
117 | 117 | Нет | 103 | Нет | 117 | Нет | 78 | Нет | 24.0 | 117 |
setRequestHeader |
1 | 12 | 1 | 8 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
status |
1 | 12 | 1 | 8 | 1.2 | 18 | 4 | 10.1 | 1 | 1.0 | 4.4 |
statusText |
1 | 12 | 1 | ≤12.1 | 1.2 | 18 | 4 | ≤12.1 | 1 | 1.0 | 4.4 |
timeout |
29 | 12 | 12 | 1712–16 | 7 | 29 | 14 | 1812–16 | 7 | 2.0 | 4.4 |
timeout_event |
29 | 12 | 12 | 16 | 7 | 29 | 14 | 16 | 7 | 1.0 | 4.4 |
upload |
2 | 12 | 3.5 | ≤12.1 | 4 | 18 | 4 | ≤12.1 | 3 | 1.0 | 4.4 |
withCredentials |
3 | 12 | 3.5Начиная с Firefox 11, использование атрибутаwithCredentials при выполнении синхронных запросов больше не поддерживается. Попытка сделать это вызывает исключение NS_ERROR_DOM_INVALID_ACCESS_ERR. |
12 | 4 | 18 | 4Начиная с Firefox для Android 14, использование атрибутаwithCredentials при выполнении синхронных запросов больше не поддерживается. Попытка сделать это вызывает исключение NS_ERROR_DOM_INVALID_ACCESS_ERR. |
12 | 3.2 | 1.0 | ≤37 |
worker_support |
4 | 12 | 3.5 | 10.6 | 4 | 18 | 4 | 11 | 5 | 1.0 | 4 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest_API