以下是我的Lynda.com ajax课程中的一些代码。
var request = new XMLHttpRequest();
request.open('GET', 'data.txt');
request.onreadystatechange = function()
{
if (request.readyState===4)
{
console.log(request);
document.writeln(request.responseText);
}
}
request.send();
在上一课中,我们检查了 request.status 的值,该值未包含在函数中,并且运行正常。但是现在,没有任何解释, request.readyState 检查必须包含在您上面看到的函数中,否则它将无效。这是怎么回事?
答案 0 :(得分:1)
您分配给onreadystatechange
的函数是一个事件处理程序。您在调用send()
之前分配它,以便在请求引发事件时不会错过。如果您没有在事件处理程序中检查request.readyState
,那么您如何知道请求状态何时实际发生了变化?默认情况下,send()
方法是非阻止的。
替代方案必须是通过以任意间隔进行轮询来检查readyState
,这绝对是不可取的。
与上述评论者建议的一样,MDN doc非常好。
答案 1 :(得分:1)
它将工作,只是过早地工作。当我了解这一点时,我发现提醒readyState
的价值是有帮助的,这样我就能看到正在发生的事情:
request.onreadystatechange = function()
{
alert(request.readyState);
...
以下是What do the different readystates in XMLHttpRequest mean, and how can I use them?
提供的状态列表State Description 0
The request is not initialized 1
The request has been set up 2
The request has been sent 3
The request is in process 4
The request is complete