2
var _orgAjax = jQuery.ajaxSettings.xhr;
jQuery.ajaxSettings.xhr = function () {
    var xhr = _orgAjax();
    DoSomeLogging();
    return xhr;
};

上記のコードを継承しました。$.ajax(...)これがページの他の場所の呼び出しをオーバーライドし、DoSomeLogging()毎回実行されるという私の理解を誰かが確認できますか?

私は別のバグを探していますが、これに出くわし、このレガシー コードの部分が何をするのかを理解したいと思っていましたか?

xhrとにかくこれが良い習慣/関数の使用であるとは確信していませんが、あなたの意見を聞くことに興味があります. Jquery 1.7.1 を使用しています。

最後に、好奇心から_orgAjax()、( ) 呼び出しの場合に戻りに失敗した場合async: false、ロギング メソッドに到達することさえありますか?

ありがとう。

4

2 に答える 2

4

これにより、ページの他の場所の $.ajax(...) 呼び出しがオーバーライドされ、毎回 DoSomeLogging() が実行されるという私の理解を誰かが確認できますか?

はい。これは、ローカルの ajax 実装で上書きされない限り、グローバルなデフォルトの動作を定義します。

グローバル設定を定義するより文書化された方法は、ajaxSetup()の使用です。

ajaxSettingsただし、この特定の方法はjQueryドキュメントのどこにも直接記載されていませんが、同様にデフォルトのグローバル動作を設定することができます.

デモを見る- 成功する

最後に、好奇心から、(async: false) 呼び出しで _orgAjax() が返されなかった場合、ロギング メソッドに到達することさえありますか?

EsailjabeforeSendによって正しく指摘されているように、非同期設定に関係なく、ロギング メソッドが常に呼び出されるように、設定が構成されています。

DEMOを参照して ください- を使用すると、async: true戻る前にロギングが呼び出されます
async: false

ただし、ajax のドキュメントによると、次の点に注意してください。

jQuery 1.8 以降、jqXHR ($.Deferred) で async: false を使用することは
推奨されなくなりました。完全/成功/エラーのコールバックを使用する必要があります。

あなたが 1.7.1 を使用していることは知っていますが、何かが非推奨になった場合、通常は正当な理由があり、その準備をしても問題はないと思います。

completeデフォルトでログオンする ajax を構成するには、次のようにします。

DEMOcomplete -ドキュメントのデフォルト ログの設定を参照してください。これにより、送信前ではなく後にログが実行されることはわかっていますが、それは1.8が好む方法のようです。

于 2012-08-12T23:08:41.113 に答える
0

うーん、次のことができます。

$.ajaxSetup({
    beforeSend: function () {
        doSomeLogging();   
    }
});

これは、再定義するよりも確かに簡単です$.ajaxSettings.xhr

于 2012-08-12T23:06:18.847 に答える