小编典典

xmlHttpRequest .open()方法中的参数“ true”

ajax

从我在MDN中阅读的参考资料中可以看到,

如果为TRUE(默认值),则在服务器响应尚未到达时,将继续执行JavaScript函数。

这是AJAX中的A。

我一直在使用AJAX,但是当我读到它时,我有点困惑。我认为问题可能出在我不清楚AJAX概念。我当然知道AJAX不会刷新页面,这意味着到服务器的连接和响应是完全在后台完成的。

但是我可以想象根据该引用发生的事情是,如果我的JavaScript中有这样的代码:

//true, therefore process the function while server retrieves url
var xmlResponse;
var url = "http://example.com/file.xml";
xml_req.open("GET", url, true);

xml_req.onreadystatechange = function() {
     if(xml_req.readyState == 4 && xml_req.status == 200) {
        if(xml_req.responseText != null)
             xmlResponse = xml_req.responseXML; //server response may not yet arrive
        else {
             alert("failed");
             return false;
        }
     };
xml_req.send(null);

从服务器仍在检索数据的意义上来说,这是否意味着xmlResponse可能是未定义的?有人可以解释一下AJAX技术中执行的真正流程是什么吗?提前致谢。


阅读 945

收藏
2020-07-26

共1个答案

小编典典

在这里写了更详细的文章,但这是基本思想。

将其设置为true意味着您正在发出异步请求。这意味着直到http请求完成后,代码才会暂停。同步调用会锁定浏览器,因此没有其他任何运行。这可能会导致问题,因此人们更喜欢异步。

XHR对象向我们更新了它正在做什么。它为我们提供了onreadystatechange事件的更新。我们向其注册一个功能,以便我们跟踪其状态。onreadystatechange被调用了4次。每个都有不同的状态

0 = uninitialized
1 = loading
2 = loaded
3 = interactive
4 = complete

当readystate为4时,数据对我们可用。

现在,在您发布的代码中,它正在检查完整状态,并确保状态为200 [确定]

if(xml_req.readyState == 4 && xml_req.status == 200){

如果您在返回之前尝试在代码的其他地方使用xmlResponse的值,则该值将不确定。一个例子

ml_req.send(null);
alert(xmlResponse );

XMLHttpRequest文章的第一篇文章可能对您来说很不错。关于xmlhttpreq的Apple文章

2020-07-26