2009-01-21 6 views
8

Ich könnte nur ein Formular erstellen und verwenden, um eine POST-Anfrage an jede Website zu tun, ist die FORM-Methode ist nicht asynchron, ich muss wissen, wann die Seite fertig geladen hat. Ich versuchte es mit einem iframe mit einer Form im Inneren, aber keinen Erfolg.Asynchrone domänenübergreifende POST-Anfrage über JavaScript?

Irgendwelche Ideen?

EDIT

leider habe ich keine Kontrolle über die Antwortdaten, es variiert von XML, JSON zu einfachen Text.

+0

Warum scheiterten Ihre Iframe-Bemühungen? Ich habe eine Ahnung, dass es funktionieren sollte. Können Sie die Einzelheiten Ihrer Vorgehensweise angeben? –

+0

Wenn Sie keine Kontrolle über die Antwortdaten haben, wäre das kein Sicherheitsrisiko, da die auf dem iframe geladene Seite mit 'window.parent' auf das DOM Ihrer Seite zugreifen kann. – andho

Antwort

11

Sie können das Ereignis onload eines iframe erfassen. Zielen Sie Ihre form zum iframe und hören Sie für das onload. Sie können jedoch nicht auf den Inhalt des iframe zugreifen, nur auf das Ereignis.

versuchen, etwas wie folgt aus:

<iframe id='RS' name='RS' src='about:blank' onload='loaded()'></iframe> 

<form action='wherever.php' target='RS' method='POST'>...</form> 

Skriptblock:

var loadComplete = 0 
function loaded() { 
    //avoid first onload 
    if(loadComplete==0) { 
     loadComplete=1 
     return() 
    } 
    alert("form has loaded") 
} 
+0

Ja, das ist großartig: Ich weiß, dass die Daten, die ich benutzen möchte, jetzt geladen sind, großartig. Aber du kannst es immer noch nicht benutzen. –

+1

Super, können Sie ein Beispiel zeigen? Ich brauche die Daten nicht, ich muss nur wissen, wann das Ereignis ausgelöst wurde. –

+0

Ich sehe nirgendwo in der Frage, wo die Antwortdaten benötigt werden. –

1

Wenn die vom domänenübergreifenden Post zurückgegebenen Daten JSON sind, können Sie dynamisch ein Skript-Tag hinzufügen, das auf den URI verweist, der die Daten zurückgibt. Der Browser lädt das "Skript", auf das Sie dann von anderem Javascript zugreifen können.

+0

Ich habe keine Kontrolle über die Antwortdaten. –

+0

Auch Skript-Tag ist nur GET, -1 dafür. –

+0

Sicher ist der Antworttyp nicht beliebig. Sie senden Ihnen kein XML-Dokument, und die nächste Anfrage wird JSON sein. Es muss eine gewisse Logik dahinter stehen, was die Rückgabetypen bestimmt. – Sampson

-7

Sie können nichts Cross-Domain mit Javascript. Sie müssten eine Backend-Sprache wie PHP oder asp oder etwas verwenden.

+1

Baloney. Sie können dem DOM ein Skript-Tag hinzufügen, und der SRC dieses Skripts kann auf eine beliebige Stelle zeigen. Skript-Tags erzwingen nicht die gleiche Domänenrichtlinie. –

+0

Nein, aber das OP gibt an, dass er etwas mit den Daten machen muss, da es alles Mögliche sein kann (Klartext, JSON, XML). Ein Skript-Tag wird das für Sie nicht abdecken. –

+0

@Diodeus: Auch ich habe gesagt, dass er mit Javascript keine Cross-Domain-Funktion ausführen kann, was du beschreibst, ist DOM. –

0

YUI3 ‚s IO Objekt bietet Cross-Domain-Anfragen, jedoch macht es so eine kleine Blitzsteuerung mit auf die bettet Seite.

Während die Arbeit an sicheren domainübergreifenden Anfragen von JavaScript noch nicht abgeschlossen ist, müssen Sie zu diesem Zeitpunkt ein Plugin wie Flash oder Silverlight als Brücke verwenden, um die Anfrage zu stellen.

+0

Sie ignorieren die Tatsache, dass Iframe-Methode kann verwendet werden, um diese Anfrage zu stellen. – andho

2

Wenn Sie domänenübergreifend Anfragen stellen möchten, sollten Sie entweder einen JSON-Aufruf durchführen oder einen serverseitigen Proxy verwenden. Ein serverseitiger Proxy ist einfach einzurichten, nicht sicher, warum die Leute ihn so sehr meiden. Richten Sie Regeln darin ein, damit Benutzer den Proxy nicht verwenden können, um andere Dinge anzufordern.