我正在使用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???
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');
}
}
答案 0 :(得分:4)
您可以在quirksmode中阅读有关不同浏览器使用AJAX调用和readyState的行为方式。
我发现使用Abort
命令声明的this链接会发出一个状态4(尚未测试) - 您使用的是Abort
吗?