Passa le intestazioni delle richieste in una chiamata JQuery AJAX GET


242

Sto cercando di passare le intestazioni di richiesta in un AJAX GET usando jQuery. Nel blocco seguente, "data" passa automaticamente i valori nella stringa di query. Esiste invece un modo per passare quei dati nell'intestazione della richiesta?

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

Neanche il seguente ha funzionato

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

Risposte:


289

Utilizzare 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
so che ormai è super vecchio. ma volevo aggiungere che ci dovrebbe essere una virgola dopo: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');}
matthew_360

beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} funziona bene in Chrome e Firefox ma non in IE8. non è stato inviato alcun X-Test-Header. come sistemarlo? Grazie
user1940268

ho provato ma genera un errore quando passo i dettagli dell'intestazione nell'uso di "jquery-1.11.1.min.js"
Ghanshyam Baravaliya,

4
vedi sotto risposta, molto più pertinente
thedanotto,

Cosa succede se desidero aggiungere X-Test-Headere X-Test-Headera beforeSend?
Si8,

394

A partire da jQuery 1.5, c'è un headershash che puoi passare come segue:

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

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

intestazioni (aggiunta 1.5): una mappa di coppie chiave / valore dell'intestazione aggiuntive da inviare insieme alla richiesta. Questa impostazione è impostata prima che venga chiamata la funzione beforeSend; pertanto, qualsiasi valore nell'impostazione delle intestazioni può essere sovrascritto dalla funzione beforeSend.


6
Questo può essere impostato a livello globale?
Viaggio

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

6
I documenti jQuery non raccomandano più di usare $ .ajaxSetup () ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle,

2
@Glen Il loro ragionamento è che i plugin potrebbero aspettarsi che le impostazioni predefinite funzionino. Personalmente, penso sia scontato che se si cambia qualcosa a livello globale, qualcosa che dipendeva dalle impostazioni predefinite potrebbe non funzionare.
MiniRagnarok,

1
@Trip La mia raccomandazione per tutto il mondo ... scrivi il tuo wrapper per le chiamate ajax (astrazione) invece di chiamare $ .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) {
                
            }
        });


Utilizzando jQuery 1.7.2, API C # 2.x, quando si tenta di estrarre dall'intestazione l' HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));errore perché l'intestazione fornita non è stata trovata. perché r.Headers è vuoto.
Jeb50,

potresti provare qualcosa del tipo - string [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
appassionato il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.