Ü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); }
      });
Cranialsurge
quelle

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

Adam
quelle
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.

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

Enthusiast
quelle
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