Domanda

Dal momento che non è possibile applicare le intestazioni personalizzate su JSONP chiama , come faccio a fare richieste di domini incrociati e di applicare le intestazioni personalizzate utilizzando jQuery?

praticamente sto cercando di documenti l'accesso di Google con jQuery e necessità di passare un token di autenticazione:

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

Nota: Lo scopo di questo è di completamente di bypass il livello di applicazione. E 'semplice da usare rubino per connettersi al API Google Data, ma ci vuole un sacco di risorse parsing feed tutto il lato server tempo.

È stato utile?

Soluzione

È possibile utilizzare libreria client JavaScript di Google per interrogare la Documentazione API. Anche se non sono dotati di aiutanti per Docs specificamente, può ancora essere utilizzato con la maggior parte delle API, tra cui Documenti. Vedere questo post sul blog da un dipendente di Google che mostra un esempio di lavoro.

Se si finisce in un ciclo infinito delle autorizzazioni, vedere questo domanda relativa da gruppi di Google. In sostanza, i cookies non sono sempre impostati abbastanza veloce, in modo che quando il codice JavaScript controlli libreria client, esso trova nulla e reindirizza alla pagina di autorizzazione OAuth. Una soluzione è quella di aggiungere sia un piccolo ritardo prima che il controllo viene eseguito, o utilizzare un pulsante di accesso che avvia l'autorizzazione invece di farlo al caricamento della pagina.

Si sarebbe anche bisogno di aggiungere qualsiasi immagine alla pagina che risiede nello stesso dominio. Si può essere nascosto con i CSS, fino a quando nel DOM.

Utilizzando l'esempio nel post del blog di cui sopra, sono stato in grado di recuperare la mia lista documenti con JavaScript solo. Ecco la funzione di inizializzazione modificato che ho usato per sbarazzarsi del ciclo di autorizzazione infinite:

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);
    }
};  
​

Altri suggerimenti

Si consideri di scrivere del codice sul lato server che svolge per un proxy e lasciare jQuery chiamano.

È possibile, a condizione che il dominio esterno consente inviando un'intestazione Access-Control-Allow-Origin appropriata. Poi basta utilizzare l'API XMLHttpRequest nei browser che supportano il cross-domain XHR API e XDomainRequest standard di IE.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top