2008-09-09 10 views

Antwort

20

Wenn Sie jQuery verwenden es hat eine Callback-Funktion, dies zu überwinden:

http://docs.jquery.com/Ajax/jQuery.ajax#options

Ab jQuery 1.2, können Sie JSON laden Daten auf einer anderen Domäne befindet, wenn Sie eine angeben JSONP-Rückruf, der wie folgt ausgeführt werden kann: "myurl? Callback =?". jQuery ersetzt automatisch die? mit dem richtigen zu rufenden Methodennamen, Aufruf des angegebenen Callbacks. Oder, Wenn Sie den Datentyp auf "jsonp" setzen, wird automatisch ein Callback zu Ihrer Ajax-Anfrage hinzugefügt.

Alternativ können Sie Ihre Ajax-Anforderung an einen Server-Skript machen, die macht die Cross-Domain-Anruf für Sie, übergibt dann die Daten zurück zu Ihrem Skript

+0

funktioniert nur für json, was ist, wenn Sie XML benötigen? –

+0

Nun, das ist, wenn Sie die zweite Option zu tun, den Cross-Domain-Aufruf in einem serverseitigen Skript verwenden, die die XML-zurück –

+0

gibt ich auf JSON arbeitete, das Hinzufügen & Rückruf =? noch den gleichen Fehler erhalten – Miroo

0

einige weitere Details schön wäre: Welche AJAX Bibliothek benutzen Sie, was möchten Sie erreichen, wie Sie es tun.

Zum Beispiel kann es eine domainübergreifende Ajax-Anfrage sein, die nicht erlaubt ist. Verwenden Sie in diesem Fall JSON.

+0

Sorry, habe diesen Fehler mit JQuery $ .ajax auf FireFox 3. Tried jsonp Vorschlag, aber ich denke, das wird nur mit etwas funktionieren, das json dienen wird. Ich versuche, ein Beispiel für eine lokale html-basierte Mashup zu erstellen, die Daten von Yahoo! Finance ziehen wird, aber sie dienen .csv, also denke ich, dass ich SOL bin. –

+1

Die "Magie", die es funktioniert, ist der "P" -Teil (Padding) des JSONP, nicht der JSON per se. Bei einem bestimmten Dienst (wie Yahoo, haben Sie wahrscheinlich kein Glück), da sie ihren Dienst nicht ändern, um ihn auf diese Weise für einen Anruf verfügbar zu machen. – jeffreypriebe

0

Ich stieß auf dieses Problem vor kurzem und es war während ich als AJAX die lokale Anfrage laden, nicht Cross Site Scripting Problem. Auch Jimmy scheint das selbe Problem zu haben. Dies scheint das FF-Sicherheitsproblem zu sein, dieser Artikel beschreibt die cause and the solution to access to restricted uri denied" code: "1012 problem.

Sorry, bekam diesen Fehler mit JQuery $ Schnipsel auf FireFox 3. Versuchte JSONP Vorschlag, aber ich denke, das wird nur Arbeit mit etwas, das json servieren wird. Ich versuche, ein Beispiel lokale HTML-Datei basierte Mashup, die Daten von Yahoo! Finance ziehen, aber sie dienen .csv, so dass ich glaube, ich bin SOL. - Jimmy Chandra (9. September um 17:20)

Ich hoffe, Sie finden es nützlich.

6

Um die Antwort zu aktualisieren (ich denke, vor allem zu meinem Vorteil, wenn ich nach dieser Antwort später suche), wenn XML oder etwas anderes geladen wird, können Sie immer den Benutzer fragen, ob er uns erlauben wird, von einem anderen zu lesen Website mit diesem Code:

try { 
    if (netscape.security.PrivilegeManager.enablePrivilege) 
     netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); 
} catch (e) { 
    alert("Sorry, browser security settings won't let this program run."); 
    return; 
} 

(aus dem RESTful Buch Web Services) Aber das funktioniert nur in Firefox, wenn die hTML-Datei von den lokalen Datei geladen wird. Also, nicht so nützlich.

1

Eine weitere Lösung: Wenn Sie nur die Header benötigen, können Sie "HEAD" als Methode angeben und es wird kein Sicherheitsproblem ausgelöst. Zum Beispiel, wenn Sie nur wissen wollen, ob die Webseite existiert.

var client = new XMLHttpRequest(); 
client.open("HEAD", my_url, false); 
client.send(null); 
if(client.readyState != 4 || client.status != 200) //if we failed 
    alert("can't open web page");