1

当使用 jQUery 进行 AJAX 调用时,如果响应在 $.ajax() 执行后的下一行 JavaScript 之前返回到客户端,浏览器会在调用 AJAX 回调函数之前继续执行脚本,还是会它立即暂停执行并跳转到回调函数?例如:

function MyAJAXFunction() {

    // Make AJAX call
    $.ajax({
        url: "/api/...",
        success: function () {
            alert("AJAX Callback");
        }
    });

    // Do lots of work

    alert("After lots of work");

}

假设 AJAX 调用会非常快而“大量工作”会非常慢,哪些警报将首先执行?

我试图在执行 AJAX 回调所依赖的慢速任务之前启动 AJAX 调用,以便这两个操作是并行的。但是,我仍然需要保证 AJAX 回调将第二次执行。我意识到这也可以用 jQuery Differed 和 Promise 对象来完成,但我更愿意避免这些。

4

1 回答 1

2

这里的关键概念是 Javascript 如何在浏览器中以单线程方式执行。浏览器维护一个事件队列,其中新事件(例如接收 AJAX 调用的响应)在发生时排队。浏览器还运行一个单线程事件循环,其职责是

  1. 继续寻找事件。
  2. 当事件发生时触发事件处理程序。

但是,由于它是全单线程循环,如果一个函数正在运行,则只有在当前函数完全完成后才会调用下一个事件的处理函数。因此,无论响应何时到来,AJAX 响应处理程序中的警报将始终显示在主函数中的警报之后。

于 2013-07-19T01:59:19.450 回答