jsまたはjQueryを使用してカスタムHTTPヘッダーをajaxリクエストに追加するにはどうすればよいですか?


回答:


585

必要なものに応じていくつかの解決策があります...

あなたがしたい場合は、個々の要求にカスタムヘッダ(またはヘッダのセット)を追加し、その後、単に追加headersプロパティを:

// Request with custom header
$.ajax({
    url: 'foo/bar',
    headers: { 'x-my-custom-header': 'some value' }
});

すべてのリクエストにデフォルトのヘッダー(またはヘッダーのセット)追加する場合は、次を使用します$.ajaxSetup()

$.ajaxSetup({
    headers: { 'x-my-custom-header': 'some value' }
});

// Sends your custom header
$.ajax({ url: 'foo/bar' });

// Overwrites the default header with a new header
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });

すべてのリクエストにヘッダー(またはヘッダーのセット)追加する 場合は、次のようにbeforeSendフックを使用し$.ajaxSetup()ます。

$.ajaxSetup({
    beforeSend: function(xhr) {
        xhr.setRequestHeader('x-my-custom-header', 'some value');
    }
});

// Sends your custom header
$.ajax({ url: 'foo/bar' });

// Sends both custom headers
$.ajax({ url: 'foo/bar', headers: { 'x-some-other-header': 'some value' } });

編集(詳細):知っておくべきことのajaxSetup1つは、デフォルトヘッダーのセットは1つしか定義できず、は1つしか定義できないことですbeforeSendajaxSetup複数回呼び出した場合、最後のヘッダーのセットのみが送信され、最後の送信前のコールバックのみが実行されます。


beforeSend行うときに新しいを定義するとどうなり$.ajaxますか?
Kostas 2013

3
定義できるbeforeSendコールバックは1つだけです。$.ajaxSetup({ beforeSend: func... })2回呼び出すと、2番目のコールバックのみが起動します。
Prestaul

1
についての詳細を追加するために私の回答を更新しましたajaxSetup
プレスタウル

2
CORSリクエスト(すべてのブラウザー)では機能しないようです。回避策はありますか?
svassr

1
@ Si8、それは私にとってクロスドメインの問題のように見えます。ドメイン間でリクエストを行うことはできません。CORSを調べて、それが役立つかどうかを確認してください。
プレスタウル2017年

54

または、今後のすべてのリクエストでカスタムヘッダーを送信する場合は、以下を使用できます。

$.ajaxSetup({
    headers: { "CustomHeader": "myValue" }
});

このように、リクエストのオプションで明示的にオーバーライドされない限り、今後のすべてのajaxリクエストにはカスタムヘッダーが含まれます。あなたはここでより多くの情報を見つけることができますajaxSetup


1
私が本当にこれを達成したい場合、これは実際には機能していないようです。
2013年

1
まあ、実際のajax呼び出しの前にajaxSetupが呼び出されることを確認する必要があります。これが機能しない他の理由はわかりません:)
Szilard Muzsi 2013年

20

JQuery ajaxを想定すると、次のようなカスタムヘッダーを追加できます-

$.ajax({
  url: url,
  beforeSend: function(xhr) {
    xhr.setRequestHeader("custom_header", "value");
  },
  success: function(data) {
  }
});

19

XHR2を使用した例を次に示します。

function xhrToSend(){
    // Attempt to creat the XHR2 object
    var xhr;
    try{
        xhr = new XMLHttpRequest();
    }catch (e){
        try{
            xhr = new XDomainRequest();
        } catch (e){
            try{
                xhr = new ActiveXObject('Msxml2.XMLHTTP');
            }catch (e){
                try{
                    xhr = new ActiveXObject('Microsoft.XMLHTTP');
                }catch (e){
                    statusField('\nYour browser is not' + 
                        ' compatible with XHR2');                           
                }
            }
        }
    }
    xhr.open('POST', 'startStopResume.aspx', true);
    xhr.setRequestHeader("chunk", numberOfBLObsSent + 1);
    xhr.onreadystatechange = function (e) {
        if (xhr.readyState == 4 && xhr.status == 200) {
            receivedChunks++;
        }
    };
    xhr.send(chunk);
    numberOfBLObsSent++;
}; 

お役に立てば幸いです。

オブジェクトを作成する場合、リクエストを送信する前に、setRequestHeader関数を使用して名前と値を割り当てることができます。


2
これは2011年には正しかったかもしれませんが、ホイールを再発明せず、代わりにZeptoやjQueryなどのAJAXライブラリーを使用することをお勧めします。
Dan Dascalescu 2014年

4
既存のXHR2呼び出しにヘッダーを追加しようとしていて、そのためにjQueryを使用するためにすべてを書き直したくない場合を除いて...その時点で、@ gryzzlyが唯一の実行可能な答えを持っています。
roryhewitt 2014年

@AliGajani問題は、特定のアプリケーションまたはライブラリ(THREE.jsなど)が$.ajax*jQueryに依存しないb / c関数を使用せず、代わりにXHRを使用するため、これがこれらのケースで唯一の有効なオプションであることです。
コバーン2017

1
@AliGajaniさらに、ネットワークの読み込み時間だけでなく、ライブラリの解析時間も重要です。あなたは追加の依存関係何に注意していない場合はプラス、あなたはすぐにあまりにも多くの依存関係を持つプロジェクトを取得することができます
復活モニカC. - Oztaco

19

jQueryを使用せずにこれを行うこともできます。XMLHttpRequestのsendメソッドをオーバーライドし、そこにヘッダーを追加します。

XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
var newSend = function(vData) {
    this.setRequestHeader('x-my-custom-header', 'some value');
    this.realSend(vData);
};
XMLHttpRequest.prototype.send = newSend;

12

docsに$.ajaxSetup()記載されているの使用は避けてください。代わりに以下を使用してください:

$(document).ajaxSend(function(event, jqXHR, ajaxOptions) {
    jqXHR.setRequestHeader('my-custom-header', 'my-value');
});

6

「ajaxを使用する場合」および「HTTP リクエストヘッダー」を意味すると仮定して、次にheaders渡すオブジェクトのプロパティを使用します。ajax()

ヘッダー(1.5を追加)

デフォルト: {}

リクエストとともに送信する追加のヘッダーのキーと値のペアのマップ。この設定は、beforeSend関数が呼び出される前に設定されます。したがって、ヘッダー設定の値はbeforeSend関数内から上書きできます。

http://api.jquery.com/jQuery.ajax/



1

あなたはjs フェッチを使うことができます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.