1

$.ajaxSetup()を含む現在の Ajax リクエストを追跡し、beforeSends と complete をカウントする方法があります。

jsFiddle デモ

var ajaxProcs = 0;

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

問題は、特定の$.ajax()呼び出しに beforeSend または complete がある場合、実行中の Ajax リクエストの正しいカウントがスローされることです。

たとえば、これはそれを上書きし、ajaxProcs カウントに 1 を追加しません。

$.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 にオブジェクト指向のアプローチがあったとしても、とにかく親を呼び出す必要があります。魔法のように自分自身を呼び出すことはありません。

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 に答える