1

我有一种方法可以跟踪涉及$.ajaxSetup()的当前 Ajax 请求,并计算 beforeSends 和完成。

jsFiddle 演示

var ajaxProcs = 0;

$.ajaxSetup({
    beforeSend : function () { ajaxProcs++; },
    complete   : function () { ajaxProcs--; }
});

问题是,如果任何给定的$.ajax()调用具有 beforeSend 或 complete ,它将抛出运行的 Ajax 请求的正确计数。

例如,这将覆盖它,而不是将 1 添加到 ajaxProcs 计数。

$.ajax({
    beforeSend : function () { /* blah blah */ }
});

是否可以同时运行 ajaxSetup 和 $.ajax Override ?

4

4 回答 4

4

这个怎么样,让我们​​试试beforeSend()函数作为示例..

$.ajaxSetup({
    beforeSend: function(){
        console.log('execute another beforeSend() function'); 
    }
});

然后这是您的 Ajax 函数:

$.ajax({
    beforeSend : function () { 
        console.log('execute beforeSend() function');
        if('beforeSend' in $.ajaxSettings){
            $.ajaxSettings.beforeSend();
        }
    }
...

现在它将执行这两个功能

希望能帮助到你

于 2013-11-17T15:59:32.973 回答
3

尝试这个:

var ajaxProcs = 0;
$(document).ajaxSend(function(){
  ajaxProcs++;
});
$(document).ajaxComplete(function(){
  ajaxProcs--;
});

这将在每个 jQuery ajax 调用上运行,无论您将哪些回调绑定到各个请求。

于 2013-07-30T19:24:21.173 回答
2

ajaxSetup()为可以传递给ajax()函数的参数提供默认值。它们仅作为默认值应用,而不是在实际ajax()调用中提供时应用。

JQuery 的ajaxStart(),ajaxSend()ajaxComplete()是您可能想要阅读的内容。它们在每次 ajax 调用之前和之后被调用。

global不过,单独调用有一个选项ajax()可以禁用这些全局功能。

并不是一个完整的答案,因为它是可以覆盖的,但可能会有所帮助。

于 2013-07-30T19:13:08.207 回答
1

由于 jQuery 的设计方式,我认为您最好的选择是制定一个规则,从 beforeSend 手动调用 ajaxSetup 函数。即使 jQuery 有更多的 OO 方法,您仍然必须调用父级 - 它不会神奇地调用自己。

http://jsfiddle.net/mrcJ7/

var ajaxProcs = 0;

var setupObj = {
    beforeSend : function(xhr) { ajaxProcs++; console.log('Increased to: ' + ajaxProcs); },
    complete   : function() { ajaxProcs--; console.log('Decreased to: ' + ajaxProcs); }
};

$.ajaxSetup(setupObj);

$.ajax({
    url: 'http://fiddle.jshell.net',
    beforeSend : function (xhr) { 
        setupObj.beforeSend(xhr);
    }
});
于 2013-07-30T19:16:09.130 回答