2010-05-25 8 views
5

OK hier ist die Situation: Ich habe ein extern gehostetes CMS, das für 99% unserer Bedürfnisse funktioniert. Bei den fortgeschritteneren Dingen injiziere ich jedoch mein eigenes CSS + JS und mache Magie. Das Problem, auf das ich stoße, ist das Laden einer einfachen HTML-Seite aus jQuery.ajax() -Aufrufen. Es scheint in dem Sinne zu funktionieren, dass keine Warnungen oder Fehler geworfen werden; In meinem Erfolgshandler (der ausgeführt wird) ist die Antwort jedoch leer.jQuery AJAX mit zwei Domains

Ich habe mir den ganzen Morgen über den Kopf gekratzt, um das herauszufinden, und das Einzige, was mir einfällt, ist, dass es etwas mit dem Cross-Domain-Problem zu tun hat (obwohl es zu funktionieren scheint).

injizierte JavaScript:

$(document).ready(function() { 
    doui(); 
}); 
function doui() { 
    $.ajax({ 
     url: 'http://apps.mydomain.com/css/feecalc/ui.htm', 
     cache: false, 
     success: ajax_createUI, 
     charset: "utf-8", 
     error: function(e) { 
      alert(e); 
     } 
    }); 
} 
function ajax_createUI(data, textStatus) { 
    alert(data); 
    $("#ajax-content").html(data); 
} 

Mein ajax_createUI() Erfolg Handler aufgerufen und textStatus ist "Erfolg"; Die Daten sind jedoch leer. werden sollte, arbeiten aber isn sieht

JS Diese Datei @http://apps.mydomain.com/css/js/feecalc.js liegt jedoch die CMS-Website (die die JS hinein injiziert wird) befindet @http://www.mydomain.com/

Bin ich es einfach nur dumm zu sein oder ist ein Fehler, dass es, wie es nicht?

Antwort

5

Dies ist kein Fehler, es ist ein Merkmal der modernen Browser: Same Origin Policy Es gibt drei Möglichkeiten, um dies zu umgehen. Mit Blick auf die Art und Weise haben Sie bereits das Problem angegriffen, würde ich schauen in jsonp

+0

Gibt es einen Grund, warum es keinen Fehler gibt? Ich nehme an (und ich lese Ihren Link), dass der Ursprung der Seite und nicht das Skript ist? –

+0

Ist das richtig: die Domain www.natronacounty-wy.gov ruft das Skript, das Sie eingefügt haben, hinein, dann ruft dieses Skript http: //apps.natronacount-wy ... von der Seite www.natronacounty-wv.gov auf? – Nick

+0

Korrekt. Das CMS ist das WWW-System, in das CMS ich

1

denke ich, dass die meist sachgemäßen Verfahren zum Laden eine Seite ist .load()

Zweitens, wie Nick sagte, Sie Cross-Domain-Probleme auftreten . Eine Option wäre die Ausführung von load() für eine Seite Ihrer Site, die als Proxy für die Anforderung der von Ihnen benötigten Seite fungiert.

Zum Beispiel: Sie fordern .load (/myPage.aspx) und MyPage.aspx Anfrage http://apps.natronacounty-wy.gov/css/feecalc/ui.htm und senden Sie es an den Client

+1

Ich kann das nicht tun, da www nicht mein Server ist, es ist das Vendor CMS System. Apps ist mein Server, auf dem alle meine JS gespeichert ist. –

+0

@Andrew Ich denke, Sie sind Missverständnis, Sie würden den Proxy auf Ihrem Server schreiben, der die Javascript-Aufrufe hat. Auf diese Weise schreiben Sie Ihr Javascript, um eine lokale Seite/Servlet zu treffen, die den Ferninhalt lädt –

+0

@ Flash84x Ich kann keinen kundenspezifischen Code auf dem Server schreiben, der in der Lage wäre, die Anrufe zu vertreten. Der einzige Server, auf den ich Zugriff habe, sind Apps, und wenn ich daraus ein HTTP-Ergebnis lesen könnte, würde ich keinen Proxy benötigen. –

0

Sie obwohl Ihre Anfrage durch YQL (Yahoo! Query Language) abgefragt werden können, die führt zu einer JSONP-Datei (es unterstützt sogar XMLP -> XML mit einer Callback-Funktion). Dies könnte Ihre Leistung verringern, aber Yahoo bietet schnelle Server.

+0

Ich versuchte das jQuery-Plugin, das YQL verwendet und es tat das gleiche :(http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/ –

+0

Es ist wirklich einfach zu rollen Sie Ihre eigenen, nur schreiben die Callback-Funktion und die Abfrage "SELECT * from html wo url = '+ url +'", während Sie XML als Ausgabe und Ihre Callback-Funktion als Callback auswählen.Innerhalb der Callback-Funktion können Sie auswählen, was Sie anzeigen und hinzufügen möchten zum DOM. – fb55