1

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

很久以前,我得到了描述幕后发生的事情的好文件,但我把它弄丢了。

如今,网络上的 Ajax 教程只讨论如何编码,而那些 IF 语句只检查readystate == 4status == 200对于像我这样的人并没有提供很好的解释。

我用下面的代码测试了流程,我觉得输出很奇怪。我的困惑是为什么准备 4 状态出现两次?根据定义,ready 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');
                } 
   }                 
4

1 回答 1

4

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

我发现这个链接声称使用该Abort命令将发出一个 readystate 4(尚未测试过) - 你在使用Abort吗?

于 2010-12-16T15:15:15.190 回答