Что означают разные readstates в XMLHttpRequest и как я могу их использовать?
XMLHttpRequest
имеет 5 readyState
s, и я использую только 1 из них (последний, 4
).
Для чего нужны другие и какие практические приложения я могу использовать в них?
Ответы
Ответ 1
Полный список значений 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
, но это не поддерживается повсеместно и не следует полагаться.
Ответ 2
kieron содержит w3schools ref. которой никто не полагается,
bobince дает ссылку, которая на самом деле говорит о собственной реализации IE,
так вот оригинальная документация, приведенная для правильного понимания того, что представляет собой readystate:
Объект XMLHttpRequest может находиться в нескольких состояниях. Атрибут readyState должен возвращать текущее состояние, которое должно быть одним из следующих значений:
UNSENT (числовое значение 0)
Объект был создан.
ОТКРЫТО (числовое значение 1)
Метод open() успешно активирован. Во время этого состояния заголовки запросов могут быть установлены с помощью setRequestHeader(), и запрос может быть выполнен с помощью метода send().
HEADERS_RECEIVED (числовое значение 2)
Все переадресации (если они есть) были выполнены, и все HTTP-заголовки окончательного ответа были получены. Теперь доступно несколько элементов ответа объекта.
ЗАГРУЗКА (числовое значение 3)
Тело объекта ответа принимается.
СОВЕРШЕННО (числовое значение 4)
Передача данных завершена или что-то пошло не так во время передачи (например, бесконечные перенаправления).
Пожалуйста, прочтите здесь: W3C Объяснение ReadyState
Ответ 3
Оригинальная окончательная документация
0
, 1
и 2
отслеживать только то, сколько из необходимых способов сделать запрос, который вы вызывали до сих пор.
3
сообщает вам, что серверный ответ начал заходить. Но когда вы используете объект XMLHttpRequest
с веб-страницы, почти ничего (*) вы не можете сделать с этой информацией, t имеют доступ к расширенным свойствам, которые позволяют вам читать частичные данные.
readyState 4
является единственным, который имеет любой смысл.
(*: о единственном мыслимом использовании, которое я могу придумать для проверки для readyState 3
, является то, что он сигнализирует о какой-то форме жизни на сервере, поэтому вы можете увеличить время ожидания полного ответа когда вы его получите.)
Ответ 4
onreadystatechange Сохраняет функцию (или имя функции), которая будет вызываться автоматически каждый раз при изменении свойства readyState
readyState Удерживает статус XMLHttpRequest. Изменения от 0 до 4:
0: запрос не инициализирован
1: установлено подключение к серверу
2: полученный запрос
3: запрос на обработку
4: запрос завершен, и ответ готов
статус 200: "ОК"
404: Страница не найдена