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); }
      });
Cranialsurge
la source

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

Adam
la source
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.

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

passionné
la source
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