Modifier les en-têtes HTTP pour une requête JSONP

j'utilise jquery pour créer une requête pour L'API de recherche Twitter. J'utilise jsonp, comme il est nécessaire pour les requêtes inter-domaines. Cependant, L'API Twitter spécifie que vous devez définir un User-Agent unique pour ces requêtes, et limite vos requêtes si vous ne le faites pas. Le problème est que je ne vois aucun moyen de configurer cet en-tête via jquery.

C'est le code que j'utilise:

$.ajax({
    url: 'http://search.twitter.com/search.json',
    dataType: 'jsonp',
    type: 'get',
    data: { q: 'twitter' },
    success: function(data) {
        alert(data.results);
    }
});

j'ai essayé d'utiliser la méthode beforeSend, mais il semble que cet événement n'est pas à la cuisson. Quelqu'un peut venir avec un moyen de résoudre ce problème?

Merci.

24
demandé sur hippietrail 2010-07-28 11:32:05

2 réponses

JSON avec un Rembourrage fonctionne en ajoutant un élément de script de la page, avec le src attribut pointant vers l'URL du service web. Le service web renvoie alors un script contenant les données enveloppées dans une fonction de rappel qui est exécutée lorsque le script termine l'analyse. Il ne s'agit pas tant de JSON (il n'est même pas nécessaire que ce soit un JSON valide, pour commencer) que D'un simple JavaScript.

impossible de modifier les en-têtes envoyés pour un script élément ajouté à votre page, malheureusement. La seule chose que vous pouvez faire est de vérifier une méthode compatible cross-origin pour extraire des données, telles que:

  • XMLHttpRequest Level 2 - Chrome, Safari 4+, Firefox 3.5+, Opera

    // Is XMLHttpRequest Level 2 supported?
    if ("withCredentials" in new XMLHttpRequest()) 
  • XDomainRequest - pour IE 8, IE 9

    // Is XDomainRequest supported?
    if ("XDomainRequest" in window)

It ce serait une bonne idée de tester ces implémentations si elles existent et de les utiliser en conséquence, en retournant à la norme JSONP pour les navigateurs non pris en charge ou plus anciens.

il est également possible (mais peu probable, étant donné qu'il s'agit d'un service très connu) que le service web ne soit pas configuré pour permettre les requêtes d'origine croisée, de sorte que vous devrez peut-être quand même vous rabattre sur JSONP si la requête échoue. Voir aussi Cross-Origin Resource Sharing .

54
répondu Andy E 2011-02-14 09:45:58

essayez ceci:

// OAuth configurations   
    var config = {
      'client_id': 'xxxxxx.apps.googleusercontent.com',
      'scope': 'https://www.google.com/m8/feeds/contacts/default/full'          
    };

gapi.auth.authorize(config, function(data) {
      // login complete - now get token
      var token = gapi.auth.getToken();
      token.alt = 'json';
      // retrieve contacts
      jQuery.ajax({
        url: 'https://www.google.com/m8/feeds/contacts/default/full/?max-results=999999',
        dataType: 'jsonp',
        data: token,
        success: function(data) { successGmail(data); }
      });
    });

Je l'ai trouvé là: https://groups.google.com/d/msg/google-api-javascript-client/GuFxPzqQ9-0/hZpo041UaH4J

0
répondu Azr 2014-05-27 09:24:23