如果在ajax调用期间显示警报窗口会发生什么?

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)

例如,如果:

  1. ajax呼叫开始
  2. ajax调用获取数据
  3. 警报显示
  4. ajax调用返回数据(警报窗口仍然打开!)

知道JS是单线程的我知道脚本执行将停止,我只是想知道如果警报窗口没有"及时"关闭,ajax调用/响应会发生什么.

我希望我足够清楚,这不是一个"虚假"的问题.谢谢

mus*_*fan 60

这并不是很难尝试看到......但答案是警报将优先考虑并阻止执行流程.

关闭警报后,假设在警报打开时AJAX请求已完成,则将处理该success函数(或error函数).

请注意,在显示警报时,AJAX请求将继续运行(因此,在警报打开时,长时间运行的AJAX可以处理),但只是在警报关闭之前,您的脚本无法继续处理请求.

这是一个工作示例,请注意,在关闭警报之前,数据不会写入控制台.

需要注意的另一点是,在警报关闭之后,脚本将处理AJAX响应之前继续执行函数的其余部分(紧随其后的代码alert).这有助于证明我的意思


Que*_*tin 11

HTTP请求将继续运行并在后台处理.

当JS事件循环变为空闲时,将触发readystatechange处理程序.

可能会跳过某些中间就绪状态,因为事件循环正忙而该状态为真.

  • @BeNdErR要理解的重要一点是,即使Javascript是单线程的,浏览器本身也不是. (3认同)
  • XMLHttpRequest是具有JS接口的本机控件.它不依赖于JS事件循环(除了与JS通信之外,这就是为什么这样做是事件驱动的) (2认同)