Ben*_*jia 26 javascript ajax asynchronous xmlhttprequest
从我在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);
Run Code Online (Sandbox Code Playgroud)
这是否意味着在服务器仍在检索数据的意义上,xmlResponse可能是未定义的?有人可以解释一下AJAX技术中的执行流程究竟是什么?提前致谢.
epa*_*llo 23
我在这里写了一篇更详细的文章,但这是基本的想法.
将其设置为true意味着您正在进行异步请求.这意味着在http请求完成之前代码不会暂停.同步调用会锁定浏览器,因此不会运行任何其他操作.这可能会导致问题,所以人们更喜欢异步.
XHR对象更新了我们正在做的事情.它为我们提供了onreadystatechange事件的更新.我们用它注册一个函数,以便我们可以跟踪它的状态.onreadystatechange被调用4次.每个人都有不同的状态
0 = uninitialized
1 = loading
2 = loaded
3 = interactive
4 = complete
Run Code Online (Sandbox Code Playgroud)
当状态为4时,我们可以获得数据.
现在在您发布的代码中,它正在检查完整状态,并确保状态为200 [ok]
if(xml_req.readyState == 4 && xml_req.status == 200){
Run Code Online (Sandbox Code Playgroud)
如果您尝试在返回之前在代码中的其他位置使用它,则xmlResponse的值将是未定义的.一个例子
ml_req.send(null);
alert(xmlResponse );
Run Code Online (Sandbox Code Playgroud)
关于XMLHttpRequest文章的最早文章之一可能是一个很好的阅读.关于xmlhttpreq的Apple文章