XMLHttpRequest
имеет 5 readyState
, и я использую только 1 из них (последний, 4
).
Для чего нужны остальные и в каких практических приложениях я могу их использовать?
XMLHttpRequest
имеет 5 readyState
, и я использую только 1 из них (последний, 4
).
Для чего нужны остальные и в каких практических приложениях я могу их использовать?
Полный список значений 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
, но это не поддерживается повсеместно, и на него нельзя полагаться.
Ответ kieron содержит ссылку w3schools. на который никто не полагается, ответ bobince дает ссылку, которая фактически говорит о собственной реализации IE,
поэтому вот исходная документация, цитируемая, чтобы правильно понять, что представляет собой состояние готовности:
Объект XMLHttpRequest может находиться в нескольких состояниях. Атрибут readyState должен возвращать текущее состояние, которое должно быть одним из следующих значений:
UNSENT (числовое значение 0)
Объект создан.OPENED (числовое значение 1)
Метод open() успешно запущен. Во время этого состояния заголовки запросов могут быть установлены с помощью setRequestHeader(), а запрос может быть выполнен с использованием метода send().HEADERS_RECEIVED (числовое значение 2)
Все перенаправления (если они есть) выполнены, и все заголовки HTTP окончательного ответа получены. Теперь доступны несколько элементов ответа объекта.LOADING (числовое значение 3)
Получено тело объекта ответа.ВЫПОЛНЕНО (числовое значение 4)
Передача данных завершена или что-то пошло не так во время передачи (например, бесконечные перенаправления).
Прочтите здесь: Объяснение W3C ReadyState
Исходная окончательная документация
0
, 1
и 2
отслеживают только то, сколько методов, необходимых для выполнения запроса, вы уже вызвали.
3
говорит вам, что ответ сервера начал поступать. Но когда вы используете объект XMLHttpRequest
с веб-страницы, вы почти ничего (*) не можете сделать с этой информацией, поскольку у вас нет доступа к расширенным свойствам которые позволяют вам читать частичные данные.
readyState 4
— единственный, который имеет какое-либо значение.
(*: о единственном возможном использовании, которое я могу придумать для проверки readyState 3
, является то, что это сигнализирует о некоторой форме жизни на стороне сервера, поэтому вы могли бы увеличить время ожидания полного ответа, когда вы его получите. )
onreadystatechange Сохраняет функцию (или имя функции), которая будет вызываться автоматически каждый раз, когда изменяется свойство readyState. readyState Сохраняет состояние XMLHttpRequest. Изменения от 0 до 4:
0: запрос не инициализирован
1: соединение с сервером установлено
2: запрос получен
3: обработка запроса
4: запрос завершен и ответ готов
статус 200: "ОК"
404 Страница не найдена
(Из https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState)