BeN*_*ErR 52 javascript ajax single-threaded
我只是想知道如果在执行ajax调用时,在浏览器窗口中向用户提示警报会发生什么.
比如说,我有一个ajax调用
$.ajax({
url: ...,
type: GET/POST,
...
success: function(data){
console.log(data);
},
error: ...
});
Run Code Online (Sandbox Code Playgroud)
这需要很长时间才能完成(10秒).在执行调用时,会抛出一个简单的javascript警报
alert("hello!");
Run Code Online (Sandbox Code Playgroud)
例如,如果:
知道JS是单线程的我知道脚本执行将停止,我只是想知道如果警报窗口没有"及时"关闭,ajax调用/响应会发生什么.
我希望我足够清楚,这不是一个"虚假"的问题.谢谢
mus*_*fan 60
这并不是很难尝试看到......但答案是警报将优先考虑并阻止执行流程.
关闭警报后,假设在警报打开时AJAX请求已完成,则将处理该success函数(或error函数).
请注意,在显示警报时,AJAX请求将继续运行(因此,在警报打开时,长时间运行的AJAX可以处理),但只是在警报关闭之前,您的脚本无法继续处理请求.
这是一个工作示例,请注意,在关闭警报之前,数据不会写入控制台.
需要注意的另一点是,在警报关闭之后,脚本将在处理AJAX响应之前继续执行函数的其余部分(紧随其后的代码alert).这有助于证明我的意思
Que*_*tin 11
HTTP请求将继续运行并在后台处理.
当JS事件循环变为空闲时,将触发readystatechange处理程序.
可能会跳过某些中间就绪状态,因为事件循环正忙而该状态为真.