Как добавить пользовательский HTTP-заголовок в ajax-запрос с помощью js или jQuery?

кто-нибудь знает, как добавить или создать пользовательский HTTP-заголовок с помощью JavaScript или jQuery?

8 ответов


Существует несколько решений в зависимости от того, что вам нужно...

если вы хотите добавить пользовательский заголовок (или заголовки) к индивидуальному запросу тогда просто добавьте 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' } });

Edit (дополнительная информация): одна вещь, чтобы быть в курсе, что с ajaxSetup вы можете определить только один набор заголовков по умолчанию, и вы можете определить только одну beforeSend. Если вы позвоните ajaxSetup несколько раз будет отправлен только последний набор заголовков и будет выполнен только последний обратный вызов перед отправкой.


или, если вы хотите отправить пользовательский заголовок для каждого будущего запроса, вы можете использовать следующее:

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

таким образом, каждый будущий запрос ajax будет содержать пользовательский заголовок, если явно не переопределен параметрами запроса. Вы можете найти более подробную информацию о ajaxSetup здесь


предполагая jQuery ajax, вы можете добавить пользовательские заголовки, такие как -

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

вот пример использования 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 для назначения имени и значения перед отправкой запроса.


вы также можете сделать это без использования jQuery. Переопределите метод send XMLHttpRequest и добавьте туда заголовок:

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;

вы должны избегать использования $.ajaxSetup() как описано в docs. Вместо этого используйте следующее:

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

предполагая, что вы имеете в виду "при использовании ajax" и "HTTP запрос header", затем используйте headers свойство в объекте, который вы передаете ajax()

заголовки(добавил 1.5)

по умолчанию: {}

карта дополнительных пар ключ/значение заголовка для отправки вместе с запросом. Этот параметр задается перед вызовом функции beforeSend; поэтому любые значения в параметре headers могут быть перезаписаны из beforeSend функция.

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


метод "setRequestHeader" объекта XMLHttpRequest должен использоваться

http://help.dottoro.com/ljhcrlbv.php