如何使用jQuery检查是否存在任何待定的ajax?

时间:2014-10-06 08:57:03

标签: jquery ajax

我正在尝试采取一些行动:

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

但是这个动作需要完成所有的ajax,所以我这样编写:

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

好的,当所有挂起的ajax请求完成时,该函数将被触发。

但有时当我这样做时,没有待处理的ajax请求,因此在这些情况下one事件不会触发!

所以我找到了一种方法来检查是否有正在进行的ajax请求?

像:

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

这样我就可以保证行动被解雇。

2 个答案:

答案 0 :(得分:2)

我们可以简单地设置一个全局变量来标记该状态:

// 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;
    });
});

看到,如果任何ajax请求开始,变量window.ajax_loading将设置为true。当所有ajax请求都结束时,该标志设置为false。

答案 1 :(得分:1)

简单的“IF”声明

if ($.active == 0) {
   some_action();
}

作为jQuery函数

$.hasAjaxRunning = function() {
   return $.active != 0;
}