2013-07-26 11 views
29

Wie Sie wissen, lässt die Sicherheit des Webbrowsers keine domänenübergreifenden Anfragen zu. Ich lese ein Buch, das besagt, dass Sie XMLHTTPRequest nur verwenden sollten, wenn Sie die Dateien auf dem Server ablegen können (dh die Seite, die Sie laden, in dieselbe angeforderte Domäne laden). Wenn Sie nicht können - Sie sollten nach einer Alternative suchen.So stellen Sie eine domänenübergreifende Anfrage her

Meine Fragen sind:

  1. Was ist die Cross-Domain-Alternative zu XMLHTTPRequest?
  2. Wie wäre es mit WebSockets? Ermöglicht diese Technologie eine domänenübergreifende Anfrage?

EDIT: Es ist immer noch nicht klar ist für mich ...

Zum Beispiel ziehe ich meine Seite von www.domain1.com und ich brauche von www Javascript anfordern .domain2.com. So sollte die gezogene Seite etwas wie folgendes enthalten:

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

, um Cross-Domain-Einschränkungen zu vermeiden.

Und ich kann JSONP verwenden und Anforderung wird wie folgt aussehen: http://ww.domain1.com/?callback=someFunction.js

Aber: Ist es nicht das gleiche? Ich ziehe gerade js aus einer anderen Domäne! Werden bereichsübergreifende Einschränkungen vermieden?

+0

[Dieser Artikel auf MDN erklärt das Problem und die Lösungen ziemlich gut] (https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS) – Liam

Antwort

4

Führen Sie einen Cross-Domain-AJAX-Aufruf

Ihr Web-Service muss Verfahren Injektion unterstützen, um JSONP zu tun.

Ihr Code scheint in Ordnung und es sollte funktionieren, wenn Ihre Webdienste und Ihre Webanwendung in derselben Domäne gehostet werden.

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

Wenn Ihre URL beispielsweise http://10.211.2.219:8080/SampleWebService/sample.do ist, fügt jQuery Folgendes hinzu: callback = {some_random_dynamically_generated_method}.

Diese Methode ist eher eine Art Proxy tatsächlich in Fensterobjekt angefügt. Das ist nichts spezifisch, aber tut etwas wie folgt aussehen:

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 die für weitere Informationen folgende

http://json-p.org/

Make cross-domain ajax JSONP request with jQuery

+0

yeah, thanks. Aber können Sie Antwort auf die Frage ID EDIT Bereich, bitte –

18

Sie können Cross-Domain-Anfragen stellen mit dem XMLHttpRequest Objekt. Dies geschieht mit etwas, das "Cross Origin Resource Sharing" genannt wird.Siehe: http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Sehr einfach ausgedrückt, wenn die Anfrage an den Server wird der Server mit einem Access-Control-Allow-Origin Header reagieren kann, die entweder erlauben oder die Anfrage ablehnen. Der Browser muss diese Kopfzeile überprüfen und wenn es erlaubt ist, wird es mit dem Anfrageprozess fortfahren. Wenn nicht, wird der Browser die Anfrage abbrechen.

Sie können einige 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 konnte es ist ein bisschen wie ein Hack argumentieren.

+0

Ich würde argumentieren, dass dies auch ein bisschen ein Hack ist. Aber ich halte es nicht davon ab! : D –

3

Wenn Sie bereit sind, einige Daten zu übertragen, und dass Sie nicht brauchen (keine öffentlichen Infos) gesichert werden Sie eine CORS-Proxy verwenden können, ist es sehr einfach, Sie müssen nichts in Ihrem Code ändern oder auf der Server-Seite (vor allem ist es nicht Ihr Server wie Yahoo API oder OpenWeather). Ich habe es verwendet, um JSON-Dateien mit einem XMLHttpRequest abzurufen, und es hat gut funktioniert.

Verwandte Themen