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.comments
Intressting slides! Mein Problem war das ich zwei gleichartige Requests an den Server hatte und diese am Schluss nicht mehr synchronisieren konnte (multithreading with javascript realy sucks!). Theoretisch hätte ich diese asynchronen Request auch einfach nacheinander ausführen können, das der Browser beim synchronen Request blockiert habe ich nicht gewusst.
add a comment
The Trackback URL to this comment is:
http://leo.freeflux.net/blog/plugin=trackback(1706).xml
This blog is gravatar enabled.
Your email adress will never be published.
Comment spam will be deleted!






But the problem with synchronous requests is also this: http://www.phppatterns.com/stuff/sync.html - locks your browser if anything goes wrong. Did that demo as part of this talk: http://www.sitepoint.com/blogs/2006/02/10/ajaxlocalhost/