Przekaż nagłówki żądań w wywołaniu jQuery AJAX GET


242

Próbuję przekazać nagłówki żądań w AJAX GET za pomocą jQuery. W następnym bloku „dane” automatycznie przekazują wartości do kwerendy. Czy istnieje sposób na przekazanie tych danych w nagłówku żądania?

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

Poniższe też nie działało

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

Odpowiedzi:


289

Użyj 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
wiem, że to jest już bardzo stare. ale chciałem dodać, że po: beforeSend: function (xhr) {xhr.setRequestHeader („X-Test-Header”, „test-value”);}
matthew_360

beforeSend: function (xhr) {xhr.setRequestHeader („X-Test-Header”, „test-value”);} działa dobrze w Chrome i Firefox, ale nie w IE8. nie ma wysyłanego nagłówka testowego X. jak to naprawić? Dzięki
1940268,

próbowałem, ale generuje błąd, gdy przekazuję szczegóły nagłówka przy użyciu „jquery-1.11.1.min.js”
Ghanshyam Baravaliya

4
patrz poniżej odpowiedź, znacznie bardziej odpowiednia
thedanotto

Co jeśli chcę dodać X-Test-Headeri X-Test-Headerdo beforeSend?
Si8

394

Począwszy od jQuery 1.5 istnieje headersskrót, który można przekazać w następujący sposób:

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

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

nagłówki (dodano 1.5): Mapa dodatkowych par kluczy / wartości nagłówka do wysłania wraz z żądaniem. To ustawienie jest ustawiane przed wywołaniem funkcji beforeSend; dlatego wszelkie wartości w ustawieniach nagłówków można nadpisać z poziomu funkcji beforeSend.


6
Czy można to ustawić globalnie?
Wycieczka

77
Tak:$.ajaxSetup({headers: {"X-Test-Header": "test-value"}})
Lukas,

6
Dokumenty jQuery nie zalecają już używania $ .ajaxSetup () ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle

2
@Glen Ich rozumowanie polega na tym, że wtyczki mogą oczekiwać domyślnych ustawień do działania. Osobiście uważam, że biorąc pod uwagę, że globalnie coś zmienisz, coś zależnego od ustawień domyślnych może nie działać.
MiniRagnarok

1
@Trip Moja rekomendacja dla globalnie ... napisz własne opakowanie dla wywołań ajax (abstrakcja) zamiast wywoływać $ .ajax ().
Erik Philips,

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) {
                
            }
        });


Przy użyciu jQuery 1.7.2, C # API 2.x, podczas próby wyodrębnienia z nagłówka HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID")); błędu , ponieważ podanego nagłówka nie znaleziono. ponieważ r.Headers jest pusty.
Jeb50

możesz spróbować czegoś takiego jak - string [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
entuzjasta
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.