Synchroner Aufruf mit XMLHttpRequest in Firefox
Ein synchroner XMLHttp-Aufruf in JavaScript ist theoretisch nicht so schwer. Die Dokumentation ist, wohl weil synchrone Aufrufe im Vergleich zu asynchronen relativ selten benötigt werden, eher spärlich und teilweise verwirrend. Das grösste Problem ist dass das XMLHttpRequest-Objekt sind nicht in allen Browsern gleich verhält. So lässt sich der untenstehende Request im Konqueror (und wohl auch in älteren Internet Explorern und Safari) ausführen, obwohl der Aufbau eigentlich falsch ist.
//Not valide Request!Diese direkte Umwandlung des asynchronen Request in eine Synchronene ist nicht zulässig und funktioniert deshalb im Firefox (und vermutlich in anderen Browser die den Mozilla-Kern verwenden) nicht. Der korrekte asynchrone Aufruf sieht wie folgt aus:
xmlHttp.open('GET', 'json.php?name='+name, false);
xmlHttp.onreadystatechange = function () {
if (xmlHttp.readyState == 4) {
var resp = eval(xmlHttp.responseText);
saveVar.c = resp['id'];
if(vonNr.c && zuNr.c){
foundIDs();
}
}
};
xmlHttp.send(null);
xmlHttp.open('GET', 'json.php?name='+name, false);
xmlHttp.send(null);
var resp = eval(xmlHttp.responseText);
saveVar.c = resp['id'];
if(vonNr.c && zuNr.c){
foundIDs();
}
Wobei in diesem Fall die Methode send blockierend ist und auf die Antwort vom Server wartet. Der nachfolgende Code wird erst nach dem send eine Antwort erhalten hat ausgeführt.




