如何判断 jQuery 是否有挂起的 ajax 请求

同样的问题发布在 stackoverflow 上面:How to check if it exists any ajax pending with jQuery?

我有一个动作要执行:

var function some_action() {
    // ...
}

但是它需要在所有的 ajax 完成之后才触发,于是我这样写:

$(document).one('ajaxStop', some_action);

这样的话就可以让这个函数等待所有的 ajax 完成之后再执行了。

但是,有些时候我执行这个的时候并没有 ajax 在跑,然后它就不会马上执行了。

这是个问题,因此我希望有一个方法可以判断现在 jQuery 的 ajax 队列里面还有没有没完成的请求,大概会是这个样子来用:

if($.hasAjaxRunning()) {
    $(document).one('ajaxStop', some_action);
} else {
    some_action();
}

同样的问题可以看对应的 stackoverflow 问题。


解决方案:

我们可以手动写一个全局变量来设一个 flag 来判断:

// site.js
$(function() {
    window.ajax_loading = false;
    $.hasAjaxRunning = function() {
        return window.ajax_loading;
    };
    $(document).ajaxStart(function() {
        window.ajax_loading = true;
    });
    $(document).ajaxStop(function() {
        window.ajax_loading = false;
    });
});

这样就 KO 了,还算优美。


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2014/10/ajax-inprogress-jquery.html【如何判断 jQuery 是否有挂起的 ajax 请求】

发表评论

电子邮件地址不会被公开。 必填项已用*标注