Spec-Zone.ru › Web APIs

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-запроса:

  1. Создайте новый экземпляр XMLHttpRequest вызвав его конструктор.
  2. Инициализируйте его, вызвав XMLHttpRequest.open(). На этом этапе вы предоставляете URL для запроса, HTTP-метод, а также необязательно имя пользователя и пароль.
  3. Прикрепите обработчики событий для получения результата запроса. Например, событие load срабатывает при успешном завершении запроса, а событие error срабатывает при различных ошибках.
  4. Отправьте запрос, вызвав 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

См. также

  • API Fetch

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API