Що означають різні готові дані в XMLHttpRequest і як я можу їх використовувати?


113

XMLHttpRequestмає 5 readyStateс, і я використовую лише 1 з них (останній, 4).

Для чого інші, і для яких практичних застосувань я можу їх використовувати?

Відповіді:


172

Повний список readyStateзначень:

State  Description
0      The request is not initialized
1      The request has been set up
2      The request has been sent
3      The request is in process
4      The request is complete

https://www.w3schools.com/js/js_ajax_http_response.asp )

На практиці ви майже ніколи не використовуєте жоден із них, крім 4.

Деякі реалізації XMLHttpRequest можуть бачити частково отримані відповіді responseTextколи readyState==3, але це не підтримується повсюдно, і на нього не слід покладатися.


5
Помилки в передачі все ще оновлюються ReadyState до 4. Однак повністю перервана передача скине ReadyState до 0. Отже, помилка в передачі, яка є результатом перенаправлення, насправді не є "помилкою", і ви можете ігнорувати реєстрацію. / повідомлення про помилку, якщо ReadyState з xhr дорівнює 0. Це трохи неміцно, і ваш пробіг може змінюватись залежно від того, чи реєстрування кожної події / помилки є "обов'язковою" або "приємною мати". Якщо це останнє, ви можете дозволити собі втратити рідкісну подію, яка може бути помилкою разом з ReadyState 0.
Грег Петтіт

2
+1 до @MattBianco за його порадою. Я також хотів би додати, що мережа MDN Mozilla Developer , можливо, є одним з найпопулярніших та надійних довідкових сайтів для всіх ваших потреб JavaScript / HTML / CSS. Здійснюючи пошук в Google, додайте запит до "mdn", і ви вбережете себе від головних болів.
DondeEstaMiCulo

@GregPettit, чи можемо ми використовувати Readystate 0, без підключення до Інтернету, чи є якісь причини, коли "Запит не ініціалізується"
Vishal Sharma

4
Я не впевнений, @vishalsharma - наскільки я пам'ятаю, готовий стан дорівнює 0, доки запит не буде ініціалізований. Після цього будь-яке інше "завершення" (або за успіхом, або за помилкою) оновить готовий стан до 4. Тож втрачаючи Інтернет після початку передачі, переверніть його на 4, а не на 0. Якщо ніколи не було Інтернету, коли передача буде спроба все одно має бути 0; вона перейде на 1 лише після рукостискання.
Грег Петтіт

Пояснення для ReadyState 2 є помилковим - або, принаймні, повністю оманливим. Shure запит був надісланий, але ця держава фактично говорить, що всі заголовки остаточної відповіді були отримані.
інта

32

Кірон «s відповідь містить w3schools реф. на яку ніхто не покладається, відповідь Бобінса дає посилання, яке фактично говорить про власну реалізацію IE,

тому ось наведена оригінальна документація, щоб правильно зрозуміти, що являє собою готовий стан:

Об'єкт XMLHttpRequest може бути в декількох станах. Атрибут ReadyState повинен повернути поточний стан, який повинен бути одним із наступних значень:

UNSENT (числове значення 0)
Об'єкт побудований.

OPENED (числове значення 1)
Метод open () був успішно викликаний. Під час цього стану запити заголовків можуть бути встановлені за допомогою setRequestHeader (), а запит може бути зроблений за допомогою методу send ().

HEADERS_RECEIVED (числове значення 2)
Усі переадресації (якщо такі є) виконані, і всі заголовки HTTP остаточної відповіді отримано. Зараз доступні кілька членів об'єкта відповідей.

ЗАВАНТАЖЕННЯ (числове значення 3)
Отримано тіло сутності відповіді.

ЗРОБАНО (числове значення 4)
Передача даних завершена або щось пішло не так під час передачі (наприклад, нескінченні переадресації).

Будь ласка, прочитайте тут: W3C Пояснення ReadyState


@CharlesWood, виклик для мене був тут stackoverflow відмітка редактора не прийме посилатися на w3c .. перевірити, отже, я поставив короткий URL від goo.gl .... я не розумію, чому це не дозволить мені безпосередньо поставити w3c url ...
Vishal Sharma

Так, я просто спробував це в пісочниці, і, здавалося, це спрацювало.
Чарльз Вуд

22

Оригінальна остаточна документація

0, 1і 2лише відстежуйте, скільки необхідних методів зробити запит, про який ви вже телефонували.

3повідомляє вам, що відповідь сервера почала надходити. Але коли ви використовуєте XMLHttpRequestоб'єкт із веб-сторінки, майже нічого (*) ви не можете зробити з цією інформацією, оскільки у вас немає доступу до розширених властивостей, які дозволяють Ви можете прочитати часткові дані.

readyState 4- єдиний, який має будь-яке значення.

(*: про єдине можливе використання, яке я можу подумати для перевірки на ReadyState 3- це те, що воно сигналізує про певну форму життя на кінці сервера, тому ви, можливо, збільшите кількість часу, якого ви очікуєте на повну відповідь, коли отримаєте його.)


1

onreadystatechange Зберігає функцію (або назву функції), яка автоматично викликається щоразу, коли властивість ReadyState змінюється на ReadyState Утримує статус XMLHttpRequest. Зміни від 0 до 4:

0: запит не ініціалізовано

1: встановлено підключення до сервера

2: запит отримано

3: запит на обробку

4: запит закінчений і відповідь готова

статус 200: "ОК"

404: Сторінку не знайдено


0
  • 0: Клієнт UNSENT створений. open () ще не називається.
  • 1: ВИКОНАНО відкрите відкрите ().
  • 2: Викликано HEADERS_RECEIVED send (), і заголовки та статус доступні.
  • 3: ЗАВАНТАЖЕННЯ Завантаження; responseText містить часткові дані.
  • 4: Зроблено Операція завершена.

(З https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.