javascript - 初学者 AJAX 类(class) - 为什么我必须将 request.readyState 包装在一个函数中?

标签 javascript ajax

这是我在 Lynda.com ajax 类(class)中的一些代码。

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

最佳答案

您分配给 onreadystatechange 的函数是一个事件处理程序。您在调用 send() 之前分配它,这样您就不会错过请求引发事件的时间。如果您没有检查事件处理程序中的 request.readyState,您怎么知道请求状态何时实际发生了变化? send() 方法默认是非阻塞的。

另一种方法是通过在某个任意时间间隔进行轮询来检查 readyState,这绝对不是我们想要的。

就像上面评论者建议的那样,MDN医生很好。

关于javascript - 初学者 AJAX 类(class) - 为什么我必须将 request.readyState 包装在一个函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107308/

相关文章:

javascript - 将 cookie 中的值发送到脚本

javascript - 根据Javascript中的indexOf位置拆分数组并组合成单独的数组

javascript - 使用 For 循环 JS 分配变量

javascript - 跨域跟踪像素、ASP.NET、jQuery、AJAX

javascript - 使用 base64 编码数据更新 SQL 查询

php - 无法弄清楚为什么 header 位置不适用于这种情况(php)

javascript - 动态更新chartJs中的图表

javascript - 指令中定义的 Ng-click 未触发

javascript - 如何检测这个单选按钮是否被选中?

c# - 为什么这个 javascript 对象不转换为 C# 类对象?