Ajax-вызов - готовая путаница состояний - PullRequest
1 голос
/ 16 декабря 2010

Я разрабатывал, используя вызов Ajax, и во время отладки я обнаружил, что Ajax отправляет запрос / ответ столько раз, сколько я на самом деле представлял.

Давным-давно я получил хороший документ, описывающий, что происходит за сценой, но япотерял это.

В настоящее время в учебниках по Ajax в Интернете рассказывается только о том, как кодировать, и эти операторы IF проверяют только readystate == 4 и status == 200, что не дает хорошего объяснения для кого-то вроде меня.

Я тестировалпоток с кодом ниже и выводом я считаю странным.Моя путаница заключается в том, почему готовое состояние 4 появляется дважды?Согласно определению, готово 4 означает выполнено , поэтому не должно быть оснований для завершения дважды?

ВЫХОД

START
ready 1                //loading
START
ready 2                //loaded
ready 2 status=200     //loaded
START
ready 3                //interactive
ready 3 status=200     //interactive
START
ready 4                //complete
START
ready 4                //complete   ... again???

Фрагмент кода тестирования

xmlHttp.onreadystatechange = function() {

                alert("START");

                if(xmlHttp.readyState == 0) {
                    alert('ready 0');
                    alert('ready 0 status=' + xmlHttp.status);
                }

                if(xmlHttp.readyState == 1) {
                    alert('ready 1');
                    alert('ready 1 status=' + xmlHttp.status);
                }

                if(xmlHttp.readyState == 2) {
                    alert('ready 2');
                    alert('ready 2 status=' + xmlHttp.status);
                }

                if(xmlHttp.readyState == 3) {
                    alert('ready 3');
                    alert('ready 3 status=' + xmlHttp.status);
                }

                if(xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                    alert('ready 4');
                } 
   }                 

1 Ответ

4 голосов
/ 16 декабря 2010

Вы можете прочитать в quirksmode о том, как различные браузеры ведут себя с вызовами AJAX и readyState.

Я нашел эту ссылку, которая утверждает, что с помощью команды Abort будет выдано состояние готовности 4 (не проверялось) - вы используете Abort?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...