web-dev-qa-db-ja.com

すべてのAJAXリクエストにグローバルヘッダーを設定できますか?

これは機能していないようです:

$.ajaxSetup({
  headers: {
    Accept: 'application/vvv.website+json;version=1 ',
    Authorization: 'Token token=\"FuHCLyY46\"'
  }
});

そうなると思っていただろう。これらのフィルターを特にAJAX呼び出しに追加すると機能します。すべてのAJAX呼び出しに対してグローバルにこれを実行したいと思います。

24
Trip

追加のテストをいくつか行い、投稿したコードは完全に機能します。パラメータの設定方法に問題がある場合は、常にbeforeSend呼び出しを行って、XML要求を自分で変更することができます。

$.ajaxSetup({
    beforeSend: function (xhr)
    {
       xhr.setRequestHeader("Accept","application/vvv.website+json;version=1");
       xhr.setRequestHeader("Authorization","Token token=\"FuHCLyY46\"");        
    }
});
49
John Koerner

Openメソッドにモンキーパッチを適用することで、フレームワークに依存しない方法でこれを行うこともできます。

var o = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function(){
  var res = o.apply(this, arguments);
  var err = new Error();
  this.setRequestHeader('X-Ajax-Stack', JSON.stringify(err.stack));
  return res;
}

この例では、ヘッダー経由でスタックトレース情報を送信しています。これにより、バックエンドは、jQueryを使用しないサードパーティコードからのものであっても、Ajaxリクエストの発信元を知ることができます。

(注:ヘッダーに注意してください 大きすぎる

15
Daniel