从我在MDN中阅读的参考资料中可以看到,
如果为TRUE(默认值),则在服务器响应尚未到达时,将继续执行JavaScript函数。 这是AJAX中的A。
如果为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技术中执行的真正流程是什么吗?提前致谢。
我在这里写了更详细的文章,但这是基本思想。
将其设置为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文章