web-dev-qa-db-ja.com

すべてのjQueryにカスタムhttpヘッダーを追加AJAX Requests

説明のポイント:カスタムヘッダーをjQuery ajax呼び出しに追加しても問題はありません。カスタムヘッダーをすべてのajax呼び出しに自動的に追加したいのですが。

jquery $ .ajax custom http headers issue (私の質問ではありません)を見ると、各ajax呼び出しに対して手動で実装した場合のコードの動作のかなり良い例が表示されます。

すべてのjQuery ajax呼び出しに対してbeforeSendをオーバーライドしたいと思います。 jQueryのドキュメントによると、これは jQuery.ajaxSetup() を使用して行うことができますが、予期しない動作が発生する可能性があるため、予期しない動作が発生する可能性があるという警告があります。この種のグローバルコールバックについては、.ajaxStart()の使用を提案しています。 。ajaxStart() XHRが公開されていないためヘッダーを追加できることを除いて、見栄えがします。

AjaxSetupを使用してbeforeSendを追加するだけですか? ajaxStartからXHRにアクセスする方法はありますか?別のオプション?

17
Peter

プレフィルターはこれを実現する簡単な方法です。

$.ajaxPrefilter(function( options ) {
    if ( !options.beforeSend) {
        options.beforeSend = function (xhr) { 
            xhr.setRequestHeader('CUSTOM-HEADER-KEY', 'CUSTOM-HEADER-VALUE');
        }
    }
});

この方法では、特定のリクエストがbeforeSendオプションをオーバーライドしない限り、すべてのリクエストがカスタムヘッダーを取得します。

ただし、ajaxSetupを使用して同じ目標を達成できることに注意してください。警告が表示される唯一の理由は、それを使用するとすべてのajaxリクエストに影響するため(私のメソッドと同じように)、特定のリクエストがそのオプションセットを必要としなかった場合に望ましくない結果が生じる可能性があるためです。結局のところ、ajaxSetupを使用することをお勧めします。

27
Kevin B

Ajaxグローバルイベントを使用できます ajaxSend()

$( document ).ajaxSend(function( event, jqxhr, settings ) {
    jqxhr.setRequestHeader(name, value)
});

デモ: フィドル

16
Arun P Johny