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

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

$.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); }
      });

person Cranialsurge    schedule 15.07.2010    source источник


Ответы (3)


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

$.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

person Adam    schedule 15.07.2010
comment
Я знаю, что это уже супер-старый. но я хотел добавить, что после: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} - person matthew_360; 19.01.2013
comment
beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} хорошо работает в Chrome и Firefox, но не в IE8. нет отправки X-Test-Header. как это исправить? Спасибо - person user1940268; 31.01.2015
comment
Я пробовал, но он выдает ошибку, когда я передаю детали заголовка при использовании jquery-1.11.1.min.js - person Ghanshyam Baravaliya; 06.05.2016
comment
см. ответ ниже, гораздо более актуальный - person thedanotto; 27.09.2016
comment
Что, если я хочу добавить X-Test-Header и X-Test-Header к beforeSend? - person Si8; 01.02.2017
comment
возможно ли это с помощью jsonp? - person Kirby; 29.12.2017
comment
этот ответ правильный, если вы используете jsonp, но если вы не видите ниже ответ @Lukas. Предупреждение, если вы оба используете https для url и jsonp, это не сработает. - person Emmanuel Gleizer; 14.03.2018
comment
Что, если я хочу передать объект json в x-text-header? Я попробовал, и он получает [Object Object] - person Rishav; 27.03.2019

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

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

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

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

person Lukas    schedule 11.09.2012
comment
Да: $.ajaxSetup({headers: {"X-Test-Header": "test-value"}}) - person Lukas; 26.01.2013
comment
Документы jQuery больше не рекомендуют использовать $ .ajaxSetup () (api.jquery.com/jQuery. ajaxSetup) - person Glen Selle; 10.06.2014
comment
@Glen Они аргументируют это тем, что плагины могут ожидать, что настройки по умолчанию будут работать. Лично я думаю, что если вы что-то глобально измените, то что-то, что зависело от настроек по умолчанию, может не сработать. - person MiniRagnarok; 13.10.2014
comment
@Trip Моя рекомендация для глобального использования ... напишите свою собственную оболочку для вызовов ajax (абстракция) вместо вызова $ .ajax (). - person Erik Philips; 09.06.2016
comment
имейте в виду, что это не работает с jsonp (см. stackoverflow.com/questions/7433556/) для jsonp ссылаются на ответ @Adam - person Emmanuel Gleizer; 14.03.2018
comment
Имейте в виду, что если вы отправляете междоменный запрос, вы должны разрешить свой собственный заголовок в .httaccess с помощью Header always set Access-Control-Allow-Headers "x-requested-with, Content-Type, ..., x-test-header", в противном случае появится ошибка Access to XMLHttpRequest at 'http://...' from origin 'http://...' has been blocked by CORS policy: Request header field X-Test-Header is not allowed by Access-Control-Allow-Headers in preflight response. - person Serhii Popov; 06.12.2018
comment
Что, если я хочу передать объект json в x-text-header? Я попробовал, и он получает [Object Object], когда я это делаю - person Rishav; 27.03.2019
comment
Объекты @Rishav JSON не допускаются в заголовках. Вам нужно будет JSON.stringify его, а затем проанализировать на сервере. - person Lukas; 27.03.2019

person    schedule
comment
Используя jQuery 1.7.2, C # API 2.x, при попытке извлечь из заголовка HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID")); ошибка, потому что данный заголовок не был найден. потому что r.Headers пуст. - person Jeb50; 15.04.2017
comment
вы можете попробовать что-то вроде - string [] ids = System.Web.HttpContext.Current.Request.Headers [logonID] .Split (','); - person enthusiast; 17.04.2017
comment
dataType должен быть записан ad datatype - person tree; 09.10.2020