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

时间:2014-05-22 08:19:03

标签: javascript ajax single-threaded

我只是想知道如果在执行ajax调用时,在浏览器窗口中会向用户提示警报,会发生什么。

比方说,我有一个ajax调用

$.ajax({
    url: ...,
    type: GET/POST,
    ...
    success: function(data){
        console.log(data);
    },
    error: ...
});

需要很长时间才能完成(10秒)。在执行调用时,会抛出一个简单的javascript警报

alert("hello!");

例如,如果:

会发生什么
  1. ajax call starts
  2. ajax调用获取数据
  3. 警告显示
  4. ajax调用返回数据(警报窗口仍然打开!)
  5. 知道JS是单线程的我知道脚本执行将停止,我只是想知道如果警报窗口没有及时关闭,ajax调用/响应会发生什么。

    我希望我足够清楚,这不是一个“虚假”的问题。谢谢

2 个答案:

答案 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处理程序。

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