Übergeben Sie Anforderungsheader in einem jQuery AJAX GET-Aufruf


241

Ich versuche, Anforderungsheader in einem AJAX GET mit jQuery zu übergeben. Im folgenden Block übergibt "data" automatisch die Werte im Querystring. Gibt es eine Möglichkeit, diese Daten stattdessen im Anforderungsheader zu übergeben?

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

Das Folgende hat auch nicht funktioniert

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

Antworten:


289

Verwendung 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
Ich weiß, das ist mittlerweile super alt. aber ich wollte hinzufügen, dass es ein Komma geben sollte nach: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'Testwert');}
matthew_360

beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'Testwert');} funktioniert gut in Chrome und Firefox, aber nicht in IE8. Es wird kein X-Test-Header gesendet. wie man es repariert? Thx
user1940268

Ich habe versucht, aber es wirft Fehler, wenn ich Header-Details bei der Verwendung von "jquery-1.11.1.min.js" übergeben
Ghanshyam Baravaliya

4
siehe unten Antwort, viel relevanter
thedanotto

Was passiert , wenn ich möchte hinzufügen X-Test-Headerund X-Test-Headerauf das beforeSend?
Si8

393

Ab jQuery 1.5 gibt es einen headersHash, den Sie wie folgt übergeben können:

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

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

Header (hinzugefügt 1.5): Eine Karte mit zusätzlichen Header-Schlüssel / Wert-Paaren, die zusammen mit der Anforderung gesendet werden sollen. Diese Einstellung wird festgelegt, bevor die Funktion beforeSend aufgerufen wird. Daher können alle Werte in der Header-Einstellung in der beforeSend-Funktion überschrieben werden.


6
Kann dies global eingestellt werden?
Reise

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

6
Die jQuery-Dokumente empfehlen nicht mehr die Verwendung von $ .ajaxSetup () ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle

2
@Glen Ihre Argumentation ist, dass Plugins möglicherweise erwarten, dass die Standardeinstellungen funktionieren. Persönlich denke ich, dass es selbstverständlich ist, dass etwas, das von den Standardeinstellungen abhängt, möglicherweise nicht funktioniert, wenn Sie etwas global ändern.
MiniRagnarok

1
@Trip Meine Empfehlung für global ... Schreiben Sie Ihren eigenen Wrapper für Ajax-Aufrufe (Abstraktion), anstatt $ .ajax () aufzurufen.
Erik Philips

44

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


Verwenden Sie jQuery 1.7.2, C # API 2.x, wenn Sie versuchen, aus dem Header einen HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));Fehler zu extrahieren , da der angegebene Header nicht gefunden wurde. weil r.Headers leer ist.
Jeb50

Vielleicht möchten Sie etwas versuchen wie - string [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
Enthusiast
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.