Passer les en-têtes de demande dans un appel jQuery AJAX GET


242

J'essaie de passer les en-têtes de demande dans un AJAX GET en utilisant jQuery. Dans le bloc suivant, "data" transmet automatiquement les valeurs dans la chaîne de requête. Existe-t-il un moyen de transmettre ces données dans l'en-tête de demande à la place?

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

Ce qui suit n'a pas fonctionné non plus

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

Réponses:


289

Utilisation 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
je sais que c'est super vieux maintenant. mais je voulais ajouter qu'il devrait y avoir une virgule après: beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');}
matthew_360

beforeSend: function (xhr) {xhr.setRequestHeader ('X-Test-Header', 'test-value');} fonctionne bien dans chrome et firefox mais pas dans IE8. il n'y a pas d'envoi X-Test-Header. comment le réparer? Thx
user1940268

j'ai essayé mais ça jette une erreur quand je passe les détails d'en-tête en utilisant "jquery-1.11.1.min.js"
Ghanshyam Baravaliya

4
voir la réponse ci-dessous, beaucoup plus pertinente
thedanotto

Et si je veux ajouter X-Test-Headeret X-Test-Headerà la beforeSend?
Si8

394

Depuis jQuery 1.5, il existe un headershachage que vous pouvez transmettre comme suit:

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

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

en-têtes (ajouté 1.5): une carte de paires clé / valeur d'en-tête supplémentaires à envoyer avec la demande. Ce paramètre est défini avant l'appel de la fonction beforeSend; par conséquent, toutes les valeurs du paramètre d'en-têtes peuvent être remplacées à partir de la fonction beforeSend.


6
Cela peut-il être défini à l'échelle mondiale?
Voyage du

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

6
Les documents jQuery ne recommandent plus d'utiliser $ .ajaxSetup () ( api.jquery.com/jQuery.ajaxSetup )
Glen Selle

2
@Glen Leur raisonnement est que les plugins peuvent s'attendre à ce que les paramètres par défaut fonctionnent. Personnellement, je pense que c'est une donnée que si vous changez quelque chose globalement, quelque chose qui dépend des paramètres par défaut peut ne pas fonctionner.
MiniRagnarok

1
@Trip Ma recommandation pour globalement ... écrivez votre propre wrapper pour les appels ajax (abstraction) au lieu d'appeler $ .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) {
                
            }
        });


Utilisation de jQuery 1.7.2, C # API 2.x, lors de la tentative d'extraction de l' HttpRequestMessage r = new HttpRequestMessage(); int mylogonID = Convert.ToInt32(r.Headers.GetValues("logonID"));erreur d'en- tête car l'en- tête donné est introuvable. car r.Headers est vide.
Jeb50

vous voudrez peut-être essayer quelque chose comme - string [] ids = System.Web.HttpContext.Current.Request.Headers ["logonID"]. Split (',');
passionné du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.