当使用 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 对象来完成,但我宁愿避免使用它们。
最佳答案
这里的关键概念是如何在浏览器中以单线程方式执行 Javascript。浏览器维护一个事件队列,新事件(例如接收 AJAX 调用的响应)在发生时被排队。浏览器还运行一个单线程事件循环,其职责是
- 继续寻找事件。
- 在事件发生时触发事件处理程序。
然而,由于它都是单线程循环,如果一个函数正在运行,下一个事件的处理函数只会在当前函数完全完成后才会被拾取。因此,无论响应何时到来,AJAX 响应处理程序中的警报将始终显示在主函数中的警报之后。
关于JavaScript - 在处理 ajax 回调之前完成执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736879/