Подтвердить что ты не робот

ReadyState vs status == 200

xmlhttp.onreadystatechange = function()
{
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
    {
        document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
    }
}

Выше код: http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.asp.

Вопрос:

Согласно этому руководству:

readyState: 4: request finished and response is ready 

status: 200: "OK" 

When readyState is 4 and status is 200, the response is ready:

так как при xmlhttp.readyState == 4 ответ готов, почему нам все еще нужно xmlhttp.status == 200? в чем разница между xmlhttp.readyState == 4 и xmlhttp.status == 200?

4b9b3361

Ответ 1

Состояние ответа xhr.status, как правило, используется для определения того, был ли запрос успешным или нет. xhr.readyState просто используется для определения состояния запроса, такого как "еще не отправлено" (0), "полный и полученный ответ" (4) и т.д.

Сервер отвечает за предоставление status, а пользовательский агент предоставляет readyState.

Ответ 2

status указывает, соответствует ли ответ сервера.
В общих словах, когда вы получили статус

500 - 599: сервер имел ошибку

400 - 499: это ошибка клиента (пример: 404 страница не найдена)

300 - 399:, то существует перенаправление

200 - 299:, тогда это правильно и

100 - 199: означает информационное сообщение

Затем статус == 200 получает сообщение, в котором сервер говорит: "Эй, я делаю работу!"

Ответ 3

моя аналогия: скорая помощь с пациентом идет в больницу. В этом сценарии семье (клиенту) и больнице (серверу) необходимо отслеживать две вещи.

  • Скорая помощь успешно дошла до больницы. (readyState)
  • Обновления здоровья пациента во время этого процесса. (status)

Если readyState === 4 и status === 200, значит все в порядке. Так же работает ajax-вызов.

Ответ 4

readyState Удерживает статус XMLHttpRequest. Изменения от 0 до 4:

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

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

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

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

4: запрос завершен, и ответ готов статус 200: "ОК"             404: Страница не найдена

Ответ 5

Учтите, что у вас есть ошибка на вашем серверном коде. Вы запрашиваете страницу, а readyState будет 4, когда сервер завершит передачу ответа, но код состояния будет 500 (или 500-то).

Ответ 6

readyState относится к ответу запроса - это 4, когда вы закончили получать ответ, и есть что посмотреть. Фактическое значение все еще неизвестно, поэтому вам нужно проверить возвращаемый status.

Ответ 7

onreadystatechange = function() выполняется только тогда, когда мы получаем ответ от сервера. Если мы получим ответ от сервера, значит, наш запрос завершен, что указано 4.And 200 сообщает нам, что он правильный. "4: запрос завершен и ответ готов к состоянию 200" Мы получаем статус 404, если страница не найдена.

Ответ 8

readyState Содержит состояние XMLHttpRequest.

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

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

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

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

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

status Возвращает номер статуса запроса

200: "ОК"

403: "Запрещено"

404 Не Найдено"

для получения подробной информации об ответных сообщениях посетите

https://www.w3schools.com/tags/ref_httpmessages.asp

Ответ 9

Иллюстрация: Вы (клиент) отправляете посылку своей девушке (серверу), но требует ее подписи (200 - подписано или 404 - не подписано). Вы можете проверить статус вашей посылки (0 - в почтовом отделении, 4 - для доставки). После того, как посылка покинет объект, она будет размечена для доставки (4). Но если вашей подруги нет дома, когда посылка прибудет, она вернется на почту без подписи (404).

Таким образом, возможно получить статус относительно пакета (4) и статус того, была ли доставка успешной (404). С AJAX запрос может быть сделан на сервер. Как только запрошенная информация получена (включая состояние сервера - найдены ли данные/документ), она отправляется обратно получателю (клиенту) для анализа перед отображением любого содержимого.