$ .ajax结合$ .ajaxSetup默认设置

时间:2013-07-30 19:02:34

标签: javascript jquery ajax

我有办法跟踪当前的Ajax请求,其中涉及 $。ajaxSetup(),并且在发送前后计算&完成。

jsFiddle Demo

var ajaxProcs = 0;

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

问题是,如果任何给定的 $。ajax()调用具有beforeSend或者完成,它将会丢弃正在运行的Ajax请求的正确计数。

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

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

是否可以同时使用ajaxSetup和$ .ajax覆盖运行?

4 个答案:

答案 0 :(得分: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();
        }
    }
...

现在它将执行两个函数

希望有所帮助

答案 1 :(得分:3)

试试这个:

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

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

答案 2 :(得分:2)

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

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

单个global调用上有一个ajax()选项会禁用这些全局函数。

不是一个完整的答案,因为它可以覆盖但可能有用。

答案 3 :(得分: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);
    }
});