初学者AJAX课程 - 为什么我必须在函数中包装request.readyState?

时间:2013-10-01 03:11:58

标签: javascript ajax

以下是我的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 检查必须包含在您上面看到的函数中,否则它将无效。这是怎么回事?

2 个答案:

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