Передайте заголовки запитів під час виклику jQuery AJAX GET


242

Я намагаюся передавати заголовки запитів в 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); }
      });

Відповіді:


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-заголовка. як це виправити? Thx
користувач1940268

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

4
див. відповідь нижче, набагато релевантніша
theadanotto

Що робити, якщо я хочу додати 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 )
Glen Selle

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.