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); }
      });

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


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.


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.