Передать заголовки запроса в вызове jQuery AJAX GET


242

Я пытаюсь передать заголовки запроса в AJAX GET, используя jQuery. В следующем блоке «data» автоматически передает значения в строку запроса. Есть ли способ передать эти данные в заголовок запроса?

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         data: { signature: authHeader },
         type: "GET",
         success: function() { alert('Success!' + authHeader); }
      });

Следующее тоже не сработало

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         beforeSend: { signature: authHeader },
         async: false,                    
         type: "GET",
                    success: function() { alert('Success!' + authHeader); }
      });

Ответы:


289

Используйте beforeSend:

$.ajax({
         url: "http://localhost/PlatformPortal/Buyers/Account/SignIn",
         data: { signature: authHeader },
         type: "GET",
         beforeSend: function(xhr){xhr.setRequestHeader('X-Test-Header', 'test-value');},
         success: function() { alert('Success!' + authHeader); }
      });

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

http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader-method


4
я знаю, что это уже очень давно. но я хотел добавить, что должна быть запятая после: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');}
matthew_360

beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} хорошо работает в chrome и firefox, но не в IE8. отправка X-Test-Header отсутствует. как это исправить? Thx
user1940268

я пытался, но он выдает ошибку, когда я передаю подробности заголовка при использовании "jquery-1.11.1.min.js"
Ghanshyam Baravaliya

4
смотрите ответ ниже, гораздо более актуальный
thedanotto

Что делать, если я хочу добавить X-Test-Headerи X-Test-Headerк beforeSend?
Si8

394

Начиная с jQuery 1.5, есть headersхеш, который вы можете передать следующим образом:

$.ajax({
    url: "/test",
    headers: {"X-Test-Header": "test-value"}
});

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

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


6
Можно ли установить это глобально?
Поездка

77
Да:$.ajaxSetup({headers: {"X-Test-Header": "test-value"}})
Лукас

6
Документы jQuery больше не рекомендуют использовать $ .ajaxSetup () ( api.jquery.com/jQuery.ajaxSetup )
Глен Селле

2
@Glen Их аргументация заключается в том, что плагины могут ожидать настройки по умолчанию для работы. Лично я считаю, что если вы что-то глобально измените, то, что зависит от настроек по умолчанию, может не сработать.
MiniRagnarok

1
@Trip Моя рекомендация для всего мира ... написать свою собственную оболочку для вызовов ajax (абстракция) вместо вызова $ .ajax ().
Эрик Филипс

45

$.ajax({
            url: URL,
            type: 'GET',
            dataType: 'json',
            headers: {
                'header1': 'value1',
                'header2': 'value2'
            },
            contentType: 'application/json; charset=utf-8',
            success: function (result) {
               // CallBack(result);
            },
            error: function (error) {
                
            }
        });


Используя jQuery 1.7.2, C # API 2.x, при попытке извлечь из заголовка HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));ошибку, поскольку данный заголовок не найден. потому что r.Headers пуст.
Jeb50

Вы можете попробовать что-то вроде - string [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
энтузиаст
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.