我只是想知道如果在执行ajax调用时,在浏览器窗口中会向用户提示警报,会发生什么。
比方说,我有一个ajax调用
$.ajax({
url: ...,
type: GET/POST,
...
success: function(data){
console.log(data);
},
error: ...
});
需要很长时间才能完成(10秒)。在执行调用时,会抛出一个简单的javascript警报
alert("hello!");
例如,如果:
会发生什么知道JS是单线程的我知道脚本执行将停止,我只是想知道如果警报窗口没有及时关闭,ajax调用/响应会发生什么。
我希望我足够清楚,这不是一个“虚假”的问题。谢谢
答案 0 :(得分:60)
这并不是很难尝试看到......但答案是警报将优先并阻止执行流程。
关闭警报并假设在警报打开时AJAX请求已完成,然后将处理success
函数(或error
函数)。
请注意,在显示警报时,AJAX请求将继续运行(因此,在警报打开时,长时间运行的AJAX可以处理),但只是在警报关闭之前,您的脚本无法继续处理请求。
Here is a working example,请注意,在关闭警报之前,数据不会写入控制台。
需要注意的另一点是,在警报关闭后,脚本将继续执行该函数的其余部分(代码在alert
之后立即> 之前的 AJAX响应处理。 This helps demonstrate what I mean
答案 1 :(得分:11)
HTTP请求将继续运行并在后台处理。
当JS事件循环变为空闲时,将触发readystatechange处理程序。
可能会跳过某些中间就绪状态,因为当该状态为真时,事件循环正忙。