Wie sende ich via JavaScript eine POST-Anfrage über verschiedene Domains hinweg?
Hinweise - die Seite sollte nicht neu geladen werden und ich muss die Antwort danach abrufen und analysieren.
Wie sende ich via JavaScript eine POST-Anfrage über verschiedene Domains hinweg?
Hinweise - die Seite sollte nicht neu geladen werden und ich muss die Antwort danach abrufen und analysieren.
Überprüfen Sie die post_method
Funktion in http://taiyolab.com/mbtweet/scripts/twitterapi_call.js - ein gutes Beispiel für die oben beschriebene iframe-Methode.
Erstellen Sie zwei versteckte iframes (fügen Sie "display: none;" zum CSS-Stil hinzu). Lassen Sie Ihren zweiten iframe auf etwas in Ihrer eigenen Domain zeigen.
Erstellen Sie ein verstecktes Formular, setzen Sie die Methode auf "post" mit target = Ihrem ersten iframe und legen Sie optional enctype auf "multipart/form-data" fest (Ich denke, Sie möchten POST verwenden, weil Sie mehrteilige Daten wie Bilder senden möchten?)
Wenn Sie fertig sind, lassen Sie das Formular das POST submit() durchführen.
Wenn es Ihnen gelingt, die andere Domain dazu zu bringen, JavaScript zurückzugeben, das eine Cross-Domain-Kommunikation mit iframes durchführt (http://softwareas.com/cross-domain-communication-with-iframes), dann haben Sie Glück und können die Antwort auch erfassen.
Natürlich können Sie, wenn Sie Ihren Server als Proxy verwenden möchten, all dies vermeiden. Senden Sie einfach das Formular an Ihren eigenen Server, der die Anfrage an den anderen Server weiterleitet (vorausgesetzt, der andere Server ist nicht so eingestellt, IP-Diskrepanzen festzustellen), holen Sie die Antwort ein und geben Sie zurück, was immer Sie möchten.
Noch eine wichtige Sache zu beachten!!! In Beispiel oben wird beschrieben, wie man das verwendet
$.ajax({
type : 'POST',
dataType : 'json',
url : 'another-remote-server',
...
});
JQuery 1.6 und niedriger hat einen Bug mit Cross-Domain XHR. Laut Firebug wurden keine Anfragen außer OPTIONS gesendet. Kein POST. Überhaupt nicht.
Ich habe 5 Stunden damit verbracht, meinen Code zu testen/einzustellen. Viele Header auf dem entfernten Server (Skript) hinzugefügt. Ohne Erfolg. Aber später habe ich die JQuery-Bibliothek auf 1.6.4 aktualisiert und alles läuft wie geschmiert.
Wenn Sie dies in einer ASP.net MVC-Umgebung mit JQuery AJAX machen möchten, befolgen Sie diese Schritte: (dies ist eine Zusammenfassung der Lösung, die in diesem Thread angeboten wird)
Nehmen wir an, dass "caller.com" (kann jede Website sein) zu "server.com" (einer ASP.net MVC-Anwendung) posten muss
Fügen Sie in der Datei Web.config der "server.com"-App den folgenden Abschnitt hinzu:
Auf der "server.com"-Seite haben wir die folgende Aktion im Controller (namens "Home"), an die wir posten werden:
[HttpPost]
public JsonResult Save()
{
//Behandeln Sie die Postdaten...
return Json(
new
{
IsSuccess = true
});
}
Dann, von der "caller.com"-Seite, senden Sie Daten aus einem Formular (mit der HTML-ID "formId") an "server.com" wie folgt:
$.ajax({
type: "POST",
url: "http://www.server.com/home/save",
dataType: 'json',
crossDomain: true,
data: $(formId).serialize(),
success: function (jsonResult) {
//Machen Sie was immer mit der Antwort
},
error: function (jqXHR, textStatus) {
//Fehler behandeln
}
});
Es gibt eine weitere Möglichkeit (die HTML5-Funktion verwendet). Sie können ein Proxy-Iframe auf dieser anderen Domain hosten, eine Nachricht mit postMessage an dieses Iframe senden, dann kann das Iframe eine POST-Anfrage (auf der gleichen Domain) durchführen und die Antwort über postMessage an das übergeordnete Fenster zurücksenden.
Elternteil auf sender.com
var win = $('iframe')[0].contentWindow
function get(event) {
if (event.origin === "http://reciver.com") {
// event.data ist die Antwort vom POST
}
}
if (window.addEventListener){
addEventListener("message", get, false)
} else {
attachEvent("onmessage", get)
}
win.postMessage(JSON.stringify({url: "URL", data: {}}),"http://reciver.com");
Iframe auf reciver.com
function listener(event) {
if (event.origin === "http://sender.com") {
var data = JSON.parse(event.data);
$.post(data.url, data.data, function(reponse) {
window.parent.postMessage(reponse, "*");
});
}
}
// ich weiß nicht, ob wir hier jQuery verwenden können
if (window.addEventListener){
addEventListener("message", listener, false)
} else {
attachEvent("onmessage", listener)
}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
0 Stimmen
Ich würde gerne ein wenig über den Anwendungsfall erfahren, der es Ihnen ermöglicht, dies zu versuchen. Könnten Sie bitte etwas darüber erzählen?
0 Stimmen
Grundsätzlich arbeite ich an einem Skript, das Text aus einer HTML-Datei an einen anderen Server zur Verarbeitung senden muss.
3 Stimmen
Kannst du einen Proxy einrichten, der dies auf der Serverseite ausführt und deinem Skript nur das Ergebnis liefert? Oder muss es zu 100% JavaScript sein?