2008-11-27 6 views
6

Aus dem, was ich verstehe, ist es aufgrund der Durchsetzung der "gleichen Ursprungsrichtlinie" in aktuellen Browsern unmöglich, Daten von einem XmlHttpRequest zu erhalten, das an eine andere Domäne als die ursprüngliche Domäne des Javascript gesendet wird.Wie können Remote-Web-Services von einem clientseitigen Skript verarbeitet werden?

Ich habe fast keine Erfahrung in dieser Angelegenheit, also bin ich verwirrt über Web-Dienste, die von Javascript unbrauchbar sind. Bedeutet dies, dass Webanwendungen mit Ajax-Funktionalität nur mit sich selbst interagieren können, ohne von anderen Domänen bereitgestellte Dienste aufzurufen? Wie funktionieren "Mash-ups"? Ich denke, dass die Dienste serverseitig konsumiert werden, dann werden die Daten über lokale Ajax-Aufrufe an den Client weitergeleitet. Ich weiß es nicht. Der einzige Weg, den ich mir vorstellen könnte, clientseitige Dienste zu nutzen, wäre, eine Javascript-Datei direkt von der Domäne des Zielwebdienstes über ein <script>-Tag abzurufen und dann die API für die Interaktion mit der Remotedomäne zu verwenden.

Kann mir jemand aufklären?

+0

Eigentlich haben Sie ein ziemlich gutes Verständnis davon. Denken Sie daran, Ajax ist einfach alt http. –

+0

Ja, Sie haben es direkt auf den Kopf getroffen ... einschließlich der Arbeit um! –

Antwort

6

In Ihrer Frage Ihre erwähnte <Skript> Trick. JSONP basiert darauf. It was formally proposed almost 3 years ago by Bob Ippolito. Es gibt Ihnen nicht das Recht, mit dem Ursprung des Skripts zu sprechen — Der Ursprung wird von Ihrer Webseite definiert, nicht von dem, was sie sonst noch enthält. Es funktioniert nur, weil der Server JSON in eine Calback-Funktion einbindet, die in Ihrem Code definiert sein sollte und beim Laden von <Skript> ausgeführt wird. Das bekannteste Beispiel für JSONP wären Yahoo-Dienste, einschließlich Flickr.

Eine andere Technik besteht darin, window.name zu verwenden, um die Informationen zu übertragen. This technique was detailed by Kris Zyp four month ago. Außerdem vergleicht sein Artikel den window.name-Transport mit JSONP. Ich kenne keinen bekannten Dienstleister, der diesen neuen Transport unterstützt. Offensichtlich wird es sich mit der Zeit ändern.

Natürlich sollte ich die kommende Microsoft XDomainRequest erwähnen. Es ist geplant, mit IE8 ausgeliefert zu werden, und keine anderen Anbieter haben sich verpflichtet, es zu unterstützen, aber es wurde für die Aufnahme in HTML 5 vorgestellt. XDR ist ein nützliches Stück Funktionalität, aber ich vermute, dass es mehrmals geändert wird, bevor es ist akzeptiert.

Wenn Sie in die Links geschaut haben, wissen Sie wahrscheinlich, dass alle diese Methoden eine gewisse Zusammenarbeit von einem 3rd-Party-Server erfordern. Sie können keine zufälligen Dienste nach Belieben verwenden. Wenn Sie einen unkooperativen Dienst verwenden müssen, ist die einzige Lösung, sie über Ihren eigenen Server mit allen damit verbundenen Problemen zu proxy: die fragwürdige Legalität, die reduzierte Leistung, die erhöhte Belastung Ihres Servers, die reduzierte Anzahl von Verbindungen zwischen dem Browser des Benutzers und Ihr Server und so weiter.

3

Werfen Sie einen Blick auf JSONP, die sich um den gleichen Ursprung Politik funktioniert so ziemlich die Ansatz Sie beschreiben, nur sicherstellen, dass Sie vertrauen wo Sie es bekommen ...

+0

Danke, ich werde etwas über JSONP recherchieren. – Franck

Verwandte Themen