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); }
      });
Wybuch czaszki
źródło

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

Adam
źródło
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.

Lukas
źródło
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) {
                
            }
        });

entuzjasta
źródło
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