Что означают различные состояния готовности в XMLHttpRequest и как их использовать?

XMLHttpRequest имеет 5 readyState, и я использую только 1 из них (последний, 4).

Для чего нужны остальные и в каких практических приложениях я могу их использовать?


person Marius    schedule 11.03.2009    source источник


Ответы (5)


Полный список значений 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, но это не поддерживается повсеместно, и на него нельзя полагаться.

person Kieron    schedule 11.03.2009
comment
Ошибки при передаче по-прежнему обновляют readyState до 4. Однако полностью прерванная передача сбросит readyState до 0. Таким образом, ошибка при передаче, возникшая в результате перенаправления, на самом деле не является ошибкой, и вы можете игнорировать регистрацию/отчетность. ошибка, если readyState xhr равен 0. Это немного хрупко, и ваш пробег может варьироваться в зависимости от того, является ли регистрация каждого события/ошибки обязательной или приятной. Если это последнее, вы можете позволить себе потерять редкое событие, которое может быть ошибкой вместе с readyState равным 0. - person Greg Pettit; 29.05.2013
comment
+1 @MattBianco за совет. Я также хотел бы добавить, что Mozilla Developer Network MDN, возможно, является одним из самых популярных и заслуживающих доверия справочных сайтов. там для всех ваших потребностей JavaScript/HTML/CSS. При выполнении поиска в Google добавляйте к запросу mdn, и вы избавите себя от головной боли. - person DondeEstaMiCulo; 27.02.2014
comment
@GregPettit, можем ли мы использовать состояние готовности 0, если нет подключения к Интернету, или существуют какие-либо причины, по которым запрос не инициализирован - person Vishal Sharma; 17.04.2014
comment
Я не уверен, @vishalsharma - насколько я помню, состояние готовности равно 0, пока запрос не инициализирован. После этого любое другое завершение (успешное или ошибочное) обновит состояние готовности до 4. Таким образом, потеря интернета после начала передачи изменит его на 4, а не обратно на 0. Если при попытке передачи никогда не было интернета, он все еще должен быть равен 0; он переместится на 1 только после рукопожатия. - person Greg Pettit; 17.04.2014
comment
Объяснение для readyState 2 неверно — или, по крайней мере, полностью вводит в заблуждение. Shure запрос был отправлен, но это состояние на самом деле говорит о том, что все окончательные заголовки ответа были получены. - person inta; 02.10.2017

Ответ kieron содержит ссылку w3schools. на который никто не полагается, ответ bobince дает ссылку, которая фактически говорит о собственной реализации IE,

поэтому вот исходная документация, цитируемая, чтобы правильно понять, что представляет собой состояние готовности:

Объект XMLHttpRequest может находиться в нескольких состояниях. Атрибут readyState должен возвращать текущее состояние, которое должно быть одним из следующих значений:

UNSENT (числовое значение 0)
Объект создан.

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

HEADERS_RECEIVED (числовое значение 2)
Все перенаправления (если они есть) выполнены, и все заголовки HTTP окончательного ответа получены. Теперь доступны несколько элементов ответа объекта.

LOADING (числовое значение 3)
Получено тело объекта ответа.

ВЫПОЛНЕНО (числовое значение 4)
Передача данных завершена или что-то пошло не так во время передачи (например, бесконечные перенаправления).

Прочтите здесь: Объяснение W3C ReadyState

person Vishal Sharma    schedule 17.04.2014
comment
@CharlesWood, проблема для меня заключалась в том, что здесь редактор уценки stackoverflow не принимает ссылку на w3c .. проверьте, поэтому я поставил короткий URL-адрес из goo.gl .... я не понимаю, почему он не позволит мне напрямую поставить w3c адрес... - person Vishal Sharma; 25.04.2014
comment
Да, я только что попробовал это в песочнице, и, похоже, это сработало. - person Charles Wood; 25.04.2014

Исходная окончательная документация

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

3 говорит вам, что ответ сервера начал поступать. Но когда вы используете объект XMLHttpRequest с веб-страницы, вы почти ничего (*) не можете сделать с этой информацией, поскольку у вас нет доступа к расширенным свойствам которые позволяют вам читать частичные данные.

readyState 4 — единственный, который имеет какое-либо значение.

(*: о единственном возможном использовании, которое я могу придумать для проверки readyState 3, является то, что это сигнализирует о некоторой форме жизни на стороне сервера, поэтому вы могли бы увеличить время ожидания полного ответа, когда вы его получите. )

person bobince    schedule 11.03.2009

onreadystatechange Сохраняет функцию (или имя функции), которая будет вызываться автоматически каждый раз, когда изменяется свойство readyState. readyState Сохраняет состояние XMLHttpRequest. Изменения от 0 до 4:

0: запрос не инициализирован

1: соединение с сервером установлено

2: запрос получен

3: обработка запроса

4: запрос завершен и ответ готов

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

404 Страница не найдена

person omertalmi    schedule 06.08.2015

  • 0: НЕОТПРАВЛЕННЫЙ Клиент создан. open() еще не вызывалась.
  • 1: OPENED open() была вызвана.
  • 2: HEADERS_RECEIVED send() была вызвана, и заголовки и статус доступны.
  • 3 : ЗАГРУЗКА Загрузка; responseText содержит частичные данные.
  • 4 : ГОТОВО Операция завершена.

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

person Khurshid Ansari    schedule 09.01.2018