当使用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对象来完成,但我宁愿避免使用它们。
答案 0 :(得分:2)
这里的关键概念是如何在浏览器内以单线程方式执行Javascript。浏览器维护一个事件队列,其中新事件(例如接收AJAX调用的响应)在发生时排队。浏览器还运行一个单线程事件循环,其职责是
然而,由于它的所有单线程循环,如果正在运行一个函数,则只有在当前函数完全完成后才会拾取下一个事件的处理函数。因此,无论响应何时到来,AJAX响应处理程序中的警报将始终显示在main函数中的警报之后。