XMLHttpRequest і XMLHttpRequest2

Публікації

XMLHttpRequest є об'єктом ECMAScript HTTP API для відправки запитів на сервер.

Назва XMLHttpRequest може здаватися дещо застарілою і вводити в оману.

    Розшифровка назви XMLHttpRequest:
  • XML - задум XMLHttpRequest полягав у роботі з даними в форматі XML. Коли XMLHttpRequest створювали то XML був популярним форматом для обміну даними через Інтернет. Назва XMLHttpRequest відображає цю початкову мету — обробку XML даних.
  • HTTP - вказує що цей об'єкт використовується для здійснення HTTP-запитів, що є основним протоколом для взаємодії між веб-браузерам та сервером.
  • Request - означає запит. Вказує що об'єкт XMLHttpRequest дозволяє створювати і відправляти HTTP-запити до сервера.

Історія створення

XMLHttpRequest був розроблений Microsoft на початку 2000-х років для браузера Internet Explorer. Цей API дозволяв виконувати асинхронні HTTP-запити без перезавантаження сторінки, що стало революційним для веб-розробки. Пізніше ця технологія перейшла до W3C у 2006 році, та була адаптована для інших браузерів і стала стандартом для здійснення асинхронних запитів у веб-додатках.

XMLHttpRequest2 або "XMLHttpRequest Level 2" був розроблений у 2011 році і представляє собою розширену версію API, яка включає нові можливості і вдосконалення. Він був частиною специфікації HTML5 і був впроваджений для покращення функціональності та забезпечення більшої гнучкості при роботі з HTTP-запитами.

Різниці і можливості

Ось основні відмінності між XMLHttpRequest і XMLHttpRequest2:

ХарактеристикаXMLHttpRequestXMLHttpRequest2
Асинхронні запитиТакТак
Події прогресуНіТак
Формати даних (BLOB, ArrayBuffer)НіТак
FormDataНіТак
Крос-доменні запити (CORS)Обмежена підтримкаПокращена підтримка
Тайм-аутиНіТак
    Нові можливості XMLHttpRequest2:
  • Прогресивні події: дозволяють відстежувати процес відправлення та отримання даних.
  • Крос-доменні запити: підтримка CORS (Cross-Origin Resource Sharing), що дозволяє здійснювати запити до інших доменів.
  • Передача бінарних даних: можливість надсилати та отримувати Blob та ArrayBuffer.
  • Тайм-аути: можливість встановлювати час очікування для запитів.
Властивості/МетодиXMLHttpRequestXMLHttpRequest2
open()
send()
abort()
setRequestHeader()
getResponseHeader()
getAllResponseHeaders()
responseText
responseXML
status
statusText
onreadystatechange
readyState
timeout
ontimeout
onprogress
responseType
response
withCredentials
overrideMimeType()
onload
onerror
onabort
onloadstart
onloadend

Зверніть увагу що всі сучасні браузери підтримують XMLHttpRequest2. Спосіб створення об'єкта XMLHttpRequest і XMLHttpRequest2 є однакомив. Тому немає змоги вибирати між версіями при створенні об'єкта XMLHttpRequest. new XMLHttpRequest();

    При роботі з XMLHttpRequest для відправлення запиту на сервер потрібно виконати такі основні пункту:
  • Створити об'єкт XMLHttpRequest. var ajax = new XMLHttpRequest();
  • Ініціалізувати (налаштувати) запит за допомогою open(). ajax.open('get','/ajax.php',true);
  • Відправити запит на сервер за допомогою send(). ajax.send();

Для отримання даних які відправив сервер (відповідь від сервера) є події: XMLHttpRequest - onreadystatechange, XMLHttpRequest2 - onload.

Приклади використання

Приклад простого GET-запиту за допомогою XMLHttpRequest:

var xhr = new XMLHttpRequest(); xhr.open('GET', '/ajax.php?act=test_info', true); xhr.onreadystatechange=function(){ if(xhr.readyState === XMLHttpRequest.DONE){ if(xhr.status === 200){ console.log('Response:', xhr.responseText); }else{ console.log('HTTP Error:', xhr.status); } } }; xhr.send();

Приклад використання нових можливостей у XMLHttpRequest2, таких як обробка подій прогресу і тайм-аутів:

var xhr = new XMLHttpRequest(); xhr.open('GET', '/ajax.php?act=test_info', true); xhr.timeout = 10000; // 10 секунд тайм-аут xhr.onprogress = function(event){ if(event.lengthComputable){ var percentComplete = (event.loaded / event.total) * 100; console.log('Progress:', percentComplete.toFixed(2) + '%'); } }; xhr.ontimeout = function(){ console.log('Request timed out.'); }; xhr.onload = function(){ if(xhr.status >= 200 && xhr.status < 300){ console.log('Response:', xhr.responseText); }else{ console.log('HTTP Error:', xhr.status); } }; xhr.onerror = function(){ console.log('Request failed.'); }; xhr.send();
Відправка даних формату JSON на сервер: var obj = { name : "JS", title : "JavaScript" } var data=JSON.stringify(obj); var ajax = new XMLHttpRequest(); ajax.onload=function(){ console.log(ajax.responseText); }; ajax.open("POST", "/ajax.php?act=info", true); ajax.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); ajax.send(data);

XMLHttpRequest (XMLHttpRequest2) потужний і зручний інструмент для виконання AJAX запитів на сервер. Проте нові стандарти, такі як fetch API пропонують ще більше можливостей і простоти у використанні, що робить XMLHttpRequest менш популярним у використані.

Leo Bai 2024-07-30 16:28:01

Тільки зареєстровані користувачі можуть писати коментарі.