javascript - 同步 AJAX 调用并非真正同步

标签 javascript ajax

我在处理同步 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 将控制权返回给浏览器之前,即直到警报窗口关闭之前,您看不到更改。如果您无法执行异步请求(我首先建议这样做),您至少可以在单独的 setTimeouted“线程”中进行 dom 更改。

关于javascript - 同步 AJAX 调用并非真正同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9608126/

相关文章:

JavaScript 正则表达式查找字符串

javascript - 使用 JS 对象和函数

javascript - 有人可以帮助我了解网络应用程序中网络客户端的 Google Cloud Endpoints 的作用吗?

java - 获取 Ajax 请求来自的域

javascript - float 堆叠CSS

javascript - 如何为制表符组行中的箭头着色?

javascript - 重新加载 $(document).ready(); AJAX加载后的功能

javascript - 使用history.pushState功能时如何启用后退和前进按钮?

javascript - Backbone.js - id vs idAttribute vs cid

jquery - CORS post 不适用于 Rails 应用