Passar cabeçalhos de solicitação em uma chamada jQuery AJAX GET

242

Estou tentando passar cabeçalhos de solicitação em um AJAX GET usando jQuery. No bloco a seguir, "data" passa automaticamente os valores na string de consulta. Existe uma maneira de passar esses dados no cabeçalho da solicitação?

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

O seguinte também não funcionou

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

Respostas:

289

Use 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ão
fonte
4
Eu sei que isso é super antigo agora. mas eu gostaria de acrescentar que deveria haver uma vírgula após: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');}
matthew_360
beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} funciona bem no chrome e firefox, mas não no IE8. não há envio do X-Test-Header. como corrigi-lo? Thx
user1940268
Eu tentei, mas ele jogue erro quando eu estou passando detalhes de cabeçalho no uso de "jquery-1.11.1.min.js"
Ghanshyam Baravaliya
4
veja a resposta abaixo, muito mais relevante
thedanotto
E se eu quiser adicionar X-Test-Headere X-Test-Headerao beforeSend?
Si8
394

No jQuery 1.5, existe um headershash que você pode transmitir da seguinte maneira:

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

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

headers (added 1.5): Um mapa de pares de chave / valor de cabeçalho adicionais para enviar junto com a solicitação. Essa configuração é definida antes que a função beforeSend seja chamada; portanto, quaisquer valores na configuração de cabeçalhos podem ser substituídos na função beforeSend.

Lukas
fonte
6
Isso pode ser definido globalmente?
Viagem
77
Sim:$.ajaxSetup({headers: {"X-Test-Header": "test-value"}})
Lukas
6
Os docs jQuery não recomendo usar $ .ajaxSetup () mais ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle
2
@Glen O raciocínio deles é que os plug-ins podem esperar que as configurações padrão funcionem. Pessoalmente, acho que, se você mudar algo globalmente, algo que depende das configurações padrão pode não funcionar.
MiniRagnarok
1
@ Trip Minha recomendação para globalmente ... escreva seu próprio invólucro para chamadas ajax (abstração) em vez de chamar $ .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
fonte
Usando o jQuery 1.7.2, C # API 2.x, ao tentar extrair o HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));erro do cabeçalho porque o cabeçalho fornecido não foi encontrado. porque r.Headers está vazio.
Jeb50
convém tentar algo como - string [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
entusiasta