76 votes

jQuery getJSON () - comment passer les en-têtes de requête?

J'ai besoin de faire un getJSON() demande, mais comment puis-je passer de l'autorisation et des en-têtes personnalisés?

Je reçois des questions que l'entête de la requête est de prendre le nom, mais PAS les valeurs. L'URL est montré par le biais d'un manuel de la demande dans un violon pour être inséré en tant qu'options au lieu de GET de l'Url.

Voici un exemple de ce que nous essayons de faire qui fonctionne très bien dans un violon, comment puis-je reproduire cela avec la fonction ajax?

OBTENIR /de Service.svc/connexions/gdd53535342/maisons/vxcbdfsdg/personnes/dsgsdggd?format=json HTTP/1.1 User-Agent: Fiddler Authorization: Basic rgbg423535fa23y4436 X-PartnerKey: df3fgeg-g5g6-b55b-f3d2-dsgg353523 Hôte: 154.34.53.54:2757

Le Code JavaScript:

xhr = new XMLHttpRequest();

$(document).ready(function() {

  $.ajax({
    url: 'http://localhost:437/service.svc/logins/jeffrey/house/fas6347/devices?format=json',
    type: 'GET',
    datatype: 'json',
    success: function() { alert("Success"); },
    error: function() { alert('Failed!'); },
    beforeSend: setHeader       
  });   
});


function setHeader(xhr) {

  xhr.setRequestHeader('Authorization', 'Basic faskd52352rwfsdfs');
  xhr.setRequestHeader('X-PartnerKey', '3252352-sdgds-sdgd-dsgs-sgs332fs3f');

}

Fiddler Normale De Demande De Titres

OBTENIR /de service.svc/connexions/jeffrey/maison/fas6347/appareils?format=json HTTP/1.1 User-Agent: Fiddler Authorization: Basic faskd52352rwfsdfs X-PartnerKey: 3252352-sdgds-sdgd-oad-sgs332fs3f Host: localhost:437

Fiddler Par Ajax() De Demande De Titres

Les OPTIONS de service.svc/connexions/jeffrey/maison/fas6347/appareils?format=json HTTP/1.1 Host: localhost:437 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.6) Gecko/20100625 Firefox/3.6.6 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 115 Proxy-Connection: keep-alive Origine: http://ipv4.fiddler:61975 Contrôle d'accès-Demande-Méthode: OBTENIR Contrôle d'accès-Request-Headers: autorisation,x-partnerkey

84voto

David Hoerster Points 18815

Je suis d'accord avec sunetos que vous aurez à utiliser le $.ajax function pour passer en-têtes de requête. Pour ce faire, vous devez écrire une fonction pour la beforeSend gestionnaire d'événement, qui est l'un des $.ajax() options. Voici un échantillon rapide sur la façon de le faire:

<html>
  <head>
    <script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
    <script type="text/javascript">
      $(document).ready(function() {
        $.ajax({
          url: 'service.svc/Request',
          type: 'GET',
          dataType: 'json',
          success: function() { alert('hello!'); },
          error: function() { alert('boo!'); },
          beforeSend: setHeader
        });
      });

      function setHeader(xhr) {
        xhr.setRequestHeader('securityCode', 'Foo');
        xhr.setRequestHeader('passkey', 'Bar');
      }
    </script>
  </head>
  <body>
    <h1>Some Text</h1>
  </body>
</html>

Si vous exécutez le code ci-dessus et de regarder le trafic dans un outil comme Fiddler, vous verrez deux demandes en-têtes passés en:

  • securityCode avec une valeur de Foo
  • clé avec une valeur de Bar

Le setHeader fonction pourrait également être incluse dans le $.ajax options, mais je voulais appeler ça.

Espérons que cette aide!

39voto

Sean N. Points 45

Je pense que vous pouvez définir les en-têtes tout en utilisant toujours getJSON () comme ceci:

 $.ajaxSetup({
  headers : {
    'Authorization' : 'Basic faskd52352rwfsdfs',
    'X-PartnerKey' : '3252352-sdgds-sdgd-dsgs-sgs332fs3f'
  }
});
$.getJSON('http://localhost:437/service.svc/logins/jeffrey/house/fas6347/devices?format=json', function(json) { alert("Success"); }); 
 

15voto

sunetos Points 2122

La méthode $ .getJSON () est un raccourci qui ne vous permet pas de spécifier des options avancées comme ça. Pour ce faire, vous devez utiliser la méthode complète $ .ajax (). Remarquez dans la documentation de http://api.jquery.com/jQuery.getJSON/ , "Ceci est une fonction abrégée Ajax, qui équivaut à:"

 $.ajax({
  url: url,
  dataType: 'json',
  data: data,
  success: callback
});
 

Utilisez donc simplement $ .ajax () et fournissez tous les paramètres supplémentaires dont vous avez besoin.

0voto

Ivan Kaplin Points 45

J'ai eu le même problème avec la requête OPTIONS envoyée par $ .ajax () au lieu de POST (le type était 'POST'). Lorsque j'ouvre une page html en utilisant un système de fichiers local (ex: C: \ testajax.html), la fonction $ .ajax () génère une requête OPTIONS comme dans votre question. Mais après avoir déployé cette page sur un serveur Web et y avoir accédé via http (http: //localhost/testajax.html), il génère une demande POST normale (toujours comme dans votre question).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X