Ajax调用 - 准备状态流混乱

时间:2010-12-16 10:40:38

标签: javascript ajax flow

我正在使用Ajax调用进行开发,在调试时,我发现Ajax发送的请求/响应时间比我想象的要多很多。

很久以前,我收到了很好的文件,描述了幕后发生的事情,但我失去了它。

现在,网络上的Ajax教程只讨论如何编码,而那些IF语句只检查readystate == 4status == 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???

TEST CODE代码段

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 个答案:

答案 0 :(得分:4)

您可以在quirksmode中阅读有关不同浏览器使用AJAX调用和readyState的行为方式。

我发现使用Abort命令声明的this链接会发出一个状态4(尚未测试) - 您使用的是Abort吗?