我在处理同步 AJAX 请求时遇到问题。
我正在创建一个 Web 应用程序,其中有许多按顺序调用的 AJAX 请求,这些请求应该按严格的顺序返回。我决定简单地同步调用它们,而不是将每个后续请求放入最后一个请求的 readystatechange 事件处理程序中。
但是,在以下代码中,在将响应添加到 DOM 之前调用alert()。
window.addEventListener("load", main, false);
function main (e) {
// Sending synchronous request
var request = new XMLHttpRequest();
request.open("GET", fileName, false);
request.overrideMimeType("text/xml");
request.send(null);
// Receiving response
var response = request.responseXML;
// Changing XML Tree to corresponding XHTML Tree
response = XMLtoXHTML(response);
//Adding response to the body
document.body.appendChild(response);
// Calling alert
alert("Hello World");
}
响应实际上已成功添加到 DOM,但前提是单击警报消息上的“确定”。当我使用 Safari 的脚本调试功能进行演练时,响应确实会在调用alert()之前添加到 DOM。
有什么建议吗?
注意:我遗漏了其他请求。
最佳答案
我猜它实际上确实被添加了,只是在 JS 将控制权返回给浏览器之前,即直到警报窗口关闭之前,您看不到更改。如果您无法执行异步请求(我首先建议这样做),您至少可以在单独的 setTimeout
ed“线程”中进行 dom 更改。
关于javascript - 同步 AJAX 调用并非真正同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608126/