Ist es möglich, domänenübergreifenden Requests in Javascript und stellen Sie Benutzerdefinierte Header zu machen?

StackOverflow https://stackoverflow.com/questions/3073336

Frage

Da Sie können nicht benutzerdefinierte Header anwenden auf JSONP ruft , wie kann ich Cross-Domain-Anfragen und wenden benutzerdefinierte Header mit jQuery?

machen

Ich versuche, im Grunde um Zugang zu Google Text & Tabellen mit jQuery und Notwendigkeit, eine Authentifizierungs-Token weitergeben müssen:

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

Hinweis: Das Ziel dieser ist zu vollständig Bypass der Anwendungsschicht. Es ist einfach zu bedienen Rubin auf die Google Data API zu verbinden, aber es braucht eine Menge von Ressourcen bis Parsing-Feeds die ganze Zeit-Server-Seite.

War es hilfreich?

Lösung

Sie können mit Googles JavaScript-Client-Bibliothek die Dokumente API abzufragen. Auch wenn es nicht für Dokumente mit Helfer kommt speziell, kann es noch mit den meisten APIs verwendet werden, einschließlich Text & Tabellen. Sehen Sie diese Blog-Post durch ein Google-Mitarbeiter, dass zeigt ein funktionierendes Beispiel.

Wenn Sie in einer Endlosschleife von Berechtigungen am Ende finden Sie in diesem damit verbundene Frage von Google-Gruppen. Grundsätzlich werden die Cookies nicht schnell genug eingestellt zu werden, so dass, wenn die JavaScript-Client-Bibliothek überprüft, es ist nichts und Umleitungen auf die OAuth Autorisierungsseite findet. Eine Lösung besteht darin, entweder eine kleine Verzögerung hinzufügen, bevor die Prüfung durchgeführt wird, oder einen Login-Button verwenden, dass die Eingeweihten Genehmigung statt, es zu tun auf Seite laden.

Sie würden auch ein beliebiges Bild auf Ihrer Seite hinzufügen müssen, dass auf demselben Domäne. Es kann mit CSS versteckt werden, solange im DOM.

Am Beispiel in der obigen Blog-Post, konnte ich meine Dokumente Liste mit JavaScript allein abzurufen. Hier ist die modifizierte Initialisierungsfunktion I der unendlichen Schleife Genehmigung gewöhnungs zu befreien:

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

Andere Tipps

Betrachten wir einige Code auf der Serverseite zu schreiben, die für einen Proxy spielt und lassen jQuery es nennen.

Sie kann, solange die externe Domäne ermöglicht es durch einen entsprechenden Access-Control-Allow-Origin Header senden. Dann nutzen Sie einfach die XMLHttpRequest API in Browsern, die den Standard-Cross-Domain-XHR API und XDomainRequest in IE unterstützen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top