Ist es möglich, domänenübergreifenden Requests in Javascript und stellen Sie Benutzerdefinierte Header zu machen?
-
28-09-2019 - |
Frage
Da Sie können nicht benutzerdefinierte Header anwenden auf JSONP ruft , wie kann ich Cross-Domain-Anfragen und wenden benutzerdefinierte Header mit jQuery?
machenIch 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.
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.
- Wenn Sie PHP verwenden, benutzen
curl
. - Wenn Sie mit Java, verwenden Sie
URLConnection
oder mehr convenienced Apache Httpclient . - Wenn Sie mit C # /. NET, verwenden Sie
WebClient
. - Wenn Sie Ruby-verwenden, verwenden
Net::HTTP
.
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.