Почему мой Ajax-запрос переходит непосредственно из состояния 1 в состояние 4?
Вопрос
Я делаю запрос к CGI-программе, используя AJAX.В ответе мне высылается длина содержимого.Моя цель - динамически отображать прогресс ответа.Для этого мне нужно запустить функцию для значения onreadystate объекта XHR, равного 3.Но запрос, похоже, не приобретает этот номер статуса.Вместо этого он переходит непосредственно из состояния 1 в состояние 4.Что я упускаю из виду?
Решение
Ответ может быть получен так быстро, что вы просто не заметите его в состоянии 3.Особенно, если вы запускаете его на localhost, ответ может быть передан очень быстро.Вы могли бы попробовать установить оповещение, когда оно перейдет к этапу 3, чтобы проверить, действительно ли оно достигает цели.Кроме того, я полагаю, что Internet Explorer говорит, что доступ к ответу на этапе 3 является ошибкой, поэтому могут возникнуть проблемы с совместимостью.
Другие советы
Если вы работаете на localhost, то, вероятно, браузер никогда не получит возможности запуститься в промежуток времени между отправкой запроса и получением ответа...
- браузер открывает соединение, устанавливает readyState равным 1
- браузер отправляет пакет серверному процессу
- серверный процесс получает пакет, получает приоритет от планировщика
- сервер возвращает данные в браузер и предоставляет управление процессором.Браузер продолжает выполнение.
- браузер видит, что все данные получены, и устанавливает readyState равным 4.
Короче говоря, долгая история:не рассчитывайте на переход в состояние "приема".