Es tut mir leid, wenn mein Englisch nicht perfekt ist, wie ich sehen kann, war ich nicht klar genug ... Einer meiner wichtigsten Anliegen wird von anderen Person erklärt hier: http://http://forum.jquery.com/topic/cross-domain-ajax-and-ie
Also, welche Alternative gibt es?
1) XDomainRequest
Ich persönlich denke, dies ist der beste Weg Cross-Site Scripting in IE8 + zu implementieren (wie es nativ unterstützt wird). Das einzige Problem ist, dass es nur einen Microsoft-Weg gibt. Aber so viele andere Dinge mit IE-Familie können wir JQuery Ajax-Funktionalität leicht erweitern.
Gemäß der Dokumentation müssen Sie einige zusätzliche Header in Domäne1 angeben.tld, for example, in PHP wie folgt aus:
header("Access-Control-Allow-Origin: http://domain2.tld"); //use * for any
Vielleicht ist die nächste Alternative ist nützlich, um die jquery Implementierung von XDomainRequest zur Verfügung zu stellen;
Update (a): Es gibt einen XDR library (nicht jquery), die "Ersetzen" die XHR Klasse es Cross-Browser zu machen, ist es Sitz in pmxdr client library. Ich habe es noch nicht versucht.
2) CORS
Das einzige Problem mit diesem Plugin ist, dass ist nicht gerade eine Erweiterung der Funktionen noch anders benannt werden, so müssen Sie entweder Ihre Codes ändern oder dieses Plugin wickeln.
Update (b): Ich habe das CORS-Plugin geändert, um es einfacher zu machen. Überprüfen Sie meine andere Antwort, um den Code zu erhalten.
3) JsonP in JQuery
Dies sollte der einfachste Weg, um mein Problem zu lösen (wie ich die Kontrolle über beide Server haben). Nativ unterstützen die meisten Browser Cross-Site-Scripting, nur wenn das JSON-Format verwendet wird (ich glaube, dass auch XML verwendet werden kann). In diesem Fall wird die Funktion $ .getJSON() verwendet. Damit es funktioniert, müssen Sie (wie die Dokumentationszustände) Callback =? in der URL, zum Beispiel:
$.getJSON("http://domain2.tld/index.php?callback=?",funciton(res){ ... });
Die "?" nach „Rückruf“ wird mit einer Kennung ... in Ihrer PHP-Datei ersetzt wird, müssen Sie diese Kennung erhalten und den Json Code wie folgt umgeben:
print_r($_GET["callback"])."(".json_encode($mydata).");";
(ich das Beispiel von here bekam)
Das Problem mit dieser Methode ist, dass, wenn Sie nur HTML abrufen möchten, muss es innerhalb eines JSON-Objekts befinden und damit den Prozess ein wenig komplizierter und überwältigend machen.
4) jquery.jsonp plugin
Wenn Sie zusätzliche Validierungen und Funktionen der nativen JSONP Unterstützung in JQuery benötigen, dann versuchen Sie dieses Plugin, das auch den Prozess vereinfachen.
5) xdomainajax
Dieses Plugin verwendet eine interessante aproach mit Yahoos Dienst YQL, in denen jede Web-Seite (oder ein Teil davon) auf Json umgewandelt werden, wodurch es möglich, sie in Javascript zu importieren. Diese Methode eignet sich für Situationen, in denen Sie das Ursprungsformat nicht ändern können.
6) flXHR
Diese Lösung nutzt Flash (swf), um die Magie zu erreichen. Ich könnte sagen, dass dies eine sehr schnelle Möglichkeit ist, um eine nahezu browserübergreifende Implementierung zu erreichen (da Flash-Unterstützung erforderlich ist). Diese Methode ist möglicherweise ideal für die Sites, in denen Flash (sicher) vorhanden sein wird. Wenn Ihre Website jedoch keinen Flash-Speicher benötigt, wird dies zum Hauptnachteil, da Benutzer Flash installiert haben sollten, damit dies funktioniert.
7) xdajax
Diese Lösung wird in YUI Implementierung zusammen mit dem "Flash" Ansatz.
8) Wenn keine der vorherigen Optionen gut für Sie ist, denken Sie daran, dass Sie immer noch den alten Trick des Einfügens eines Tags zum Importieren von JS-Code verwenden können.
9) Die Verringerung der IE-Sicherheit auf das Minimum löst auch das Problem. Aber ich denke, es wird nicht gut sein, eine Nachricht wie folgt zu haben: "Bitte senken Sie Ihre Sicherheitseinstellungen, um diese Seite zu benutzen" ... lol
Ich hoffe, dass dies anderen in einer ähnlichen Situation helfen kann.
Vielen Dank dafür! Als ich dies jedoch kürzlich für einen Randfall verwendete, entdeckte ich, dass es leicht die native Funktionalität von '$ .get' und' $ .post' unterbricht, die jeweils ein jqXHR-Objekt zurückgeben. Dies lässt sich leicht beheben, indem Sie die try-Blöcke in Ihrem Code so anpassen, dass 'return $ ._ get (URL, Daten, Callback, Typ);' und 'return $ ._ post (URL, Daten, Callback, Typ);' – itsmequinn