ich habe eine funktion die den wartebildschirm einer ajaxanwendung triggern soll.
wenn ein request schneller als 1000ms abgearbeitet wird, soll der ladebildschirm nicht getriggert werden.
alles an sich kein problem, schickt man aber zwei requests sehr schnell hintereinander ab, haben beide timeouts das selbe handle, wodurch aber nur eines der beiden timeouts zurück gesetzt wird, so dass ich vor einem problem stehe!
(getestet in FF3 und IE7)
ich habe gelernt dass man immer beispiele mitliefern soll, daher im folgenden die nachgestellte situation die das verhalten exakt simuliert.
mein simulierter request dauert 500ms also sollte nie ein ladebildschirm angezeigt werden (erst nach 1000), bei zwei schnell aufeinander folgenden klicks (doppelklick auf den button oder so) bleibt am ende die meldung "show" übrig, d.h. der ladebildschirm bleibt stehen...
<script>
var timeoutHandlerWaitBG = '';
function showWaitBG(show,timeOut) {
if (show) {
if (timeOut) {
document.getElementById('debug').innerHTML = document.getElementById('debug').innerHTML + 'show';
} else {
timeoutHandlerWaitBG = window.setTimeout("showWaitBG(true,true)",1000);
document.getElementById('debug').innerHTML = document.getElementById('debug').innerHTML + 'time gestartet:' + timeoutHandlerWaitBG + ' ';
}
} else {
window.clearTimeout(timeoutHandlerWaitBG);
document.getElementById('debug').innerHTML = document.getElementById('debug').innerHTML + '<b>hide:' + timeoutHandlerWaitBG + ' </b>';
}
}
function show() {
showWaitBG(true);
var bla = window.setTimeout("showWaitBG(false)",500);
}
</script>
<div id="debug"></div>
<input type="button" onclick="show();" value="klickmich">
hat jemand eine idee warum sich die browser so verhalten?
verhindern kann ich ja nicht dass jemand zweimal schnell hintereinander einen request abschickt...
thx!
for your security, this text has been encrypted by ROT13 twice.