it-swarm.com.de

So stellen Sie eine domänenübergreifende Anfrage

Wie Sie wissen, ist es aufgrund der Sicherheit des Webbrowsers nicht möglich, domänenübergreifende Anfragen zu stellen. Ich habe ein Buch gelesen, das besagt, dass Sie XMLHTTPRequest nur verwenden sollten, wenn Sie die Dateien auf dem Server ablegen können (bedeutet, dass Sie die Seite, die Sie laden, in dieselbe angeforderte Domain ablegen). Wenn Sie nicht können, sollten Sie nach einer Alternative suchen.

Meine Fragen sind :

  1. Was ist die domänenübergreifende Alternative zu XMLHTTPRequest?
  2. Was ist mit WebSockets? Ermöglicht diese Technologie domänenübergreifende Anfragen?

EDIT: Es ist mir immer noch nicht klar ...

Zum Beispiel rufe ich meine Seite von www.domain1.com auf und muss Javascript von www.domain2.com anfordern. Die gezogene Seite sollte also Folgendes enthalten:

<script src="www.domain2.com/script.js"></script>

um domänenübergreifende Einschränkungen zu vermeiden.

Und ich kann JSONP verwenden, und die Anfrage sieht folgendermaßen aus: http://ww.domain1.com/?callback=someFunction.js

Aber: ist es nicht dasselbe? Ich ziehe gerade js von einer anderen Domain! Vermeidet es domänenübergreifende Einschränkungen?

34
VB_

Sie können domänenübergreifende Anforderungen mit dem Objekt XMLHttpRequest stellen. Dies geschieht mit der so genannten "Cross Origin Resource Sharing". Siehe: http://en.wikipedia.org/wiki/Cross-Origin_resource_sharing

Ganz einfach ausgedrückt, wenn die Anfrage an den Server gestellt wird, kann der Server mit einem Access-Control-Allow-Origin - Header antworten, der die Anfrage entweder zulässt oder ablehnt. Der Browser muss diesen Header überprüfen und setzt den Anforderungsprozess fort, wenn dies zulässig ist. Wenn nicht, bricht der Browser die Anfrage ab.

Weitere Informationen und ein funktionierendes Beispiel finden Sie hier: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or- xdomainrequest.html

JSONP ist eine alternative Lösung, aber man könnte behaupten, es ist ein bisschen hacken.

21
leggetter

Führen Sie einen domänenübergreifenden AJAX Aufruf durch

Ihr Web-Service muss die Methodeninjektion unterstützen, um JSONP ausführen zu können.

Ihr Code scheint in Ordnung zu sein und sollte funktionieren, wenn Ihre Webdienste und Ihre Webanwendung in derselben Domain gehostet werden.

Wenn Sie mit dataType ein $ .ajax ausführen: 'jsonp' bedeutet, dass jQuery der Abfrage-URL tatsächlich einen neuen Parameter hinzufügt.

Lautet Ihre URL beispielsweise http://10.211.2.219:8080/SampleWebService/sample.do, Fügt jQuery? Callback = {some_random_dynamically_generated_method} hinzu.

Diese Methode ist eher eine Art Proxy, der tatsächlich im Fensterobjekt angehängt ist. Dies ist nichts Bestimmtes, sieht aber so aus:

window.some_random_dynamically_generated_method = function(actualJsonpData) {
    //here actually has reference to the success function mentioned with $.ajax
    //so it just calls the success method like this: 
    successCallback(actualJsonData);
}

Überprüfen Sie das Folgende für weitere Informationen

Domainübergreifende Ajax-JSONP-Anforderung mit jQuery erstellen

5
Arun Bertil

Wenn Sie bereit sind, einige Daten zu übertragen und nicht gesichert werden müssen (öffentliche Informationen), können Sie einen CORS-Proxy verwenden. Es ist sehr einfach, Sie müssen nichts an Ihrem Code oder auf der Serverseite ändern (Insbesondere ist es nicht Ihr Server wie die Yahoo API oder OpenWeather). Ich habe es verwendet, um JSON-Dateien mit einem XMLHttpRequest abzurufen, und es hat gut funktioniert.

4
Tarek Jellali