JavaScript свойство XMLHttpRequest.readyState
JavaScript XMLHttpRequestОпределение и применение
JavaScript свойство readyState объекта XMLHttpRequest возвращает состояние объекта XMLHttpRequest. Объект может находиться в следующих состояниях:
Значение | Состояние | Описание |
---|---|---|
0 | UNSENT | Объект XMLHttpRequest был создан, метод open() объекта не вызывался. |
1 | OPENED | Метод open() объекта был вызван. Во время этого состояния заголовки запросов могут быть установлены с помощью метода setRequestHeader() и метод send() может быть вызван, который инициирует отправку запроса. |
2 | HEADERS_RECEIVED | Метод send() объекта был вызван, заголовки и статус доступны. |
3 | LOADING | Происходит загрузка тела ответа сервера. Если значение свойства responseType соответствует значению "text" или пустой строке, то значение свойства responseText будет содержать частичные данные. |
4 | DONE | Операция завершена. Это может означать, что передача данных была завершена успешно или не удалась. |
Обращаю Ваше внимание на то, что названия состояний отличаются в браузерах Internet Explorer в версиях ниже 11. Вместо UNSENT (0), OPENED (1), HEADERS_RECEIVED (2), LOADING (3) и DONE (4) используются такие названия как:
- READYSTATE_UNINITIALIZED (0).
- READYSTATE_LOADING (1).
- READYSTATE_LOADED (2).
- READYSTATE_INTERACTIVE (3).
- READYSTATE_COMPLETE (4).
Поддержка браузерами
Свойство | Chrome | Firefox | Opera | Safari | IExplorer | Edge |
---|---|---|---|---|---|---|
readyState | Да | Да | Да | Да | Да | Да |
JavaScript синтаксис:
XMLHttpRequest.readyState;
Cпецификация
XMLHttpRequestПример использования
<!DOCTYPE html> <html> <head> <title>Использование JavaScript методов open() и send() объекта XMLHttpRequest</title> </head> <body> <button onclick = "getPhone()">Запросить телефон</button> <!-- добавляем атрибут событий onclick --> <div id = "demo"></div> <script> function getPhone() { let xhr = new XMLHttpRequest(); // инициализируем переменную новым объектом XMLHttpRequest xhr.open("GET", "user.json"); // определяем параметры для запроса xhr.send(); // отправляем запрос на сервер xhr.onreadystatechange = function() { // проверяем состояние запроса и числовой код состояния HTTP ответа if (this.readyState == 4 && this.status == 200) { const data = JSON.parse(this.responseText); // анализируем строку в формате JSON и инициализируем переменную значением, полученным в ходе анализа document.getElementById("demo").innerHTML = "Телефон пользователя: " + data.phone; // находим элемент по id и изменяем его содержимое значением ключа объекта, содержащегося в переменной } }; } </script> </body> </html>
В этом примере с использованием атрибута событий onclick при нажатии на кнопку (HTML элемент <button>) вызываем функцию getPhone, которая:
- Вызывает конструктор объекта XMLHttpRequest и инициализирует переменную новым объектом этого типа.
- С помощью метода open() объекта XMLHttpRequest определяем параметры для запроса - указываем, что HTTP запрос будет осуществлен методом "GET", а в качестве URL адреса на который будет отправлен запрос мы задаем файл формата json. Обратите внимание, что файл размещен на том же сервере и в том же каталоге, что и документ с которого выполняется скрипт. Файл имеет следующий вид:
{ "firstName": "Василий", "lastName": "Джейсонов", "age": 25, "phone": 88005553535 }
- С помощью метода send() объекта XMLHttpRequest отправляем запрос на сервер.
- С использованием обработчика событий onreadystatechange, вызываемого при запуске события readystatechange, то есть при каждом изменении свойства readyState объекта XMLHttpRequest мы вызываем функцию, которая проверяет состояние запроса, оно должно соответствовать значению 4 (операция полностью завершена) и числовой код состояния HTTP ответа (свойство status) должен соответствовать значению 200 (успешный запрос). Если условия выполнены, то с использованием метода JSON.parse() анализируем строку в формате JSON и инициализируем переменную значением, полученным в ходе анализа. После этого с помощью метода getElementById() находим элемент с определенным глобальным атрибутом id и изменяем его содержимое значением ключа объекта, содержащегося в инициализированной ранее переменной.
Результат нашего примера:
JavaScript XMLHttpRequest