我正在使用 Ajax 调用进行开发,在调试时,我发现 Ajax 发送请求/响应的时间比我想象的要多。
很久以前,我得到了描述幕后发生的事情的好文件,但我把它弄丢了。
如今,网络上的 Ajax 教程只讨论如何编码,而那些 IF 语句只检查readystate == 4
,status == 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');
}
}