c--: Auf XMLHTTPRequest-Antwort warten, ohne neue Funktion aufzurufen

Beitrag lesen

Hallo,

ich arbeite mich gerade in Ajax ein.
Bislang schreibe ich meinen Code so, dass eine (Ursprungs-)Funktion, die Daten übertragen will, dafür eine andere Funktion (SendData) aufruft und selbst anschließend abbricht. Die weiteren Befehle, wie zum Beispiel die Ausgabe (Anzeige) der empfangenen Daten, stehen in einer weiteren Funktion (returnfunction), die die Fortsetzung der Ursprungsfunktion darstellt.

Dazu unten ein (bestimmt nicht perfekter) Codeausschnitt.

Ich suche nach einer Möglichkeit, dass die Ursprungsfunktion (DoAction), die ja Daten übertragen und dann anzeigen will, die für die Datenübertragung zuständige Funktion (SendData) aufruft, solange wartet, bis diese fertig ist, und dann im Rückgabewert (von SendData()) schon die Antwort vom Server hat.
Vom Prinzip her also evtl. so:

DoAction(action, input)  
{  
//Daten sammeln  
var dat = "action=" + action + "&input=" + input2 + "&length=" + length2;  
buffer = SendData("cmd.php", dat);  
window.alert("Hi, the server said: " + buffer);  
}

Wie kann ich die Ursprungsfunktion warten lassen, bis die Antwort angekommen ist?

Hier mein bisheriger Code (Ausschnitt):

function SendData(url, params)  
{  
var http = new XMLHttpRequest();  
http.open("POST", url, true);  
  
if (http.overrideMimeType)  
{  
http.overrideMimeType('text/xml; charset=iso-8859-1');  
}  
http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
http.setRequestHeader("Content-length", params.length);  
http.setRequestHeader("Connection", "close");  
  
http.onreadystatechange = function()  
{  
if (http.readyState == 4 && http.status == 200)  
{  
returncode = http.responseText;  
  
if (returnfunction != "") window.setTimeout(returnfunction, 10);  
returnfunction = "";  
}  
  
}  
  
http.send(params);  
  
//Return code unknown at this point !!  
}  
  
function DoAction(action, input)  
{  
var input2 = escape(input);  
var length2 = input.length;  
var dat = "action=" + action + "&input=" + input2 + "&length=" + length2;  
returnfunction = "DoAction2()";  
SendData("cmd.php", dat);  
  
//Return code unknown at this point  
}