Pase encabezados de solicitud en una llamada GET de jQuery AJAX

242

Estoy tratando de pasar encabezados de solicitud en un AJAX GET usando jQuery. En el siguiente bloque, "datos" pasa automáticamente los valores en la cadena de consulta. ¿Hay alguna forma de pasar esos datos en el encabezado de la solicitud?

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

Lo siguiente tampoco funcionó

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

Respuestas:

289

Uso 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

Adán
fuente
44
Sé que esto es súper viejo por ahora. pero quería agregar que debería haber una coma después de: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');}
matthew_360
beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} funciona bien en Chrome y Firefox pero no en IE8. no hay envío de X-Test-Header. ¿Como arreglarlo? Thx
user1940268
Lo intenté pero arrojó un error cuando paso detalles del encabezado al usar "jquery-1.11.1.min.js"
Ghanshyam Baravaliya
44
vea la respuesta a continuación, mucho más relevante
thedanotto
¿Qué pasa si quiero agregar X-Test-Headery X-Test-Headeral beforeSend?
Si8
394

A partir de jQuery 1.5, hay un headershash que puede pasar de la siguiente manera:

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

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

encabezados (agregado 1.5): un mapa de pares adicionales de clave / valor de encabezado para enviar junto con la solicitud. Esta configuración se establece antes de que se llame a la función beforeSend; por lo tanto, cualquier valor en la configuración de encabezados se puede sobrescribir desde la función beforeSend.

Lukas
fuente
66
¿Se puede configurar esto globalmente?
Viaje el
77
Sí:$.ajaxSetup({headers: {"X-Test-Header": "test-value"}})
Lukas
66
Los documentos de jQuery ya no recomiendan usar $ .ajaxSetup () ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle
2
@Glen Su razonamiento es que los complementos podrían estar esperando que la configuración predeterminada funcione. Personalmente, creo que es un hecho que si cambia globalmente algo, algo que dependía de la configuración predeterminada podría no funcionar.
MiniRagnarok
1
@Trip Mi recomendación para globalmente ... escriba su propio contenedor para llamadas ajax (abstracción) en lugar de llamar a $ .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) {
                
            }
        });

entusiasta
fuente
Usando jQuery 1.7.2, C # API 2.x, al intentar extraer del HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));error de encabezado porque no se encontró el encabezado dado. porque r.Headers está vacío.
Jeb50
puede intentar algo como: string [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
entusiasta