Question

Puisque vous ne pouvez pas appliquer en-têtes personnalisés sur JSONP appelle , comment puis-je faire une demande de domaine croix et appliquer des en-têtes personnalisés en utilisant jQuery?

Je suis essentiellement essayer d'accéder à Google docs avec jQuery et le besoin de passer une authentification jeton:

var token = "my-auth-token";
$.ajax({
  url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json",
  dataType: 'json',
  beforeSend: function(xhr) {
    xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token);
  },
  success: function(data, textStatus, XMLHttpRequest) {
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
  }
});

Note: Le but de cela est de complètement by-pass de la couche d'application. Il est simple à utiliser rubis pour se connecter à l'API Google Data, mais il prend beaucoup de ressources d'analyse syntaxique des aliments tout le côté serveur de temps.

Était-ce utile?

La solution

Vous pouvez utiliser la bibliothèque client JavaScript de Google pour interroger l'API Docs. Bien qu'il ne vient pas avec des aides pour Docs spécifiquement, il peut encore être utilisé avec la plupart des API, y compris Docs. Voir cette billet de blog par un employé de Google qui montre un exemple de travail.

Si vous vous retrouvez dans une boucle infinie des autorisations, voir cette question connexe des groupes Google. Fondamentalement, les cookies ne sont pas réglés assez vite se, alors quand les contrôles de la bibliothèque client JavaScript, il ne trouve rien et redirige vers la page d'autorisation OAuth. Une solution est d'ajouter soit un petit délai avant que la vérification est effectuée, ou utilisez un bouton de connexion qui initie l'autorisation au lieu de le faire sur la charge de page.

Vous devez également ajouter une image à votre page qui se trouve sur le même domaine. Il peut être caché avec CSS, aussi longtemps que dans les DOM.

En utilisant l'exemple dans le blog ci-dessus, j'ai pu récupérer ma liste de documents avec JavaScript seul. Voici la fonction initialize modifié je l'habitude de se débarrasser de la boucle d'autorisation infinie:

function initialize() {
    var scope = 'http://docs.google.com/feeds/';

    if (google.accounts.user.checkLogin(scope)) {
        var service = new google.gdata.client.GoogleService('writely', 'DocList-App-v1.0');   
        service.getFeed(scope + 'documents/private/full/', handleFeed, handleError);  
    } else {
        var loginButton = $("<button>Click here to login</button>");
        loginButton.click(function() {
            var token = google.accounts.user.login(scope); // can ignore returned token  
        });
        $("body").append(loginButton);
    }
};  
​

Autres conseils

Pensez à écrire un code du côté serveur qui joue un proxy et laissez jQuery l'appeler.

Vous pouvez, aussi longtemps que le domaine externe permet en envoyant un en-tête de Access-Control-Allow-Origin approprié. Ensuite, il suffit d'utiliser l'API XMLHttpRequest dans les navigateurs qui prennent en charge l'API standard XHR inter-domaines et XDomainRequest dans IE.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top