JavaScript Endlosschleife durch window.setTimeout()?

te one

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.255
Hallo,

folgendes Skript habe ich aktuell:
HTML:
...
<body onload="setRequest()">
   <div id="content">123</div>
</body>

Code:
//Quelle http://ajax.frozenfox.at/
var request;

// Request senden
function setRequest() {
	// Request erzeugen
	if (window.XMLHttpRequest) {
		request = new XMLHttpRequest(); // Mozilla, Safari, Opera
	} else if (window.ActiveXObject) {
		try {
			request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
		} catch (e) {
			try {
				request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
			} catch (e) {}
		}
	}

	// überprüfen, ob Request erzeugt wurde
	if (!request) {
		alert("Kann keine XMLHTTP-Instanz erzeugen");
		return false;
	} else {
		var url = "test.php";
		// Request öffnen
		request.open('post', url, true);
		// Request senden
		request.send(null);
		// Request auswerten
		request.onreadystatechange = interpretRequest;
	}
}
// Request auswerten
function interpretRequest() {
	switch (request.readyState) {
		// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
		case 4:
			if (request.status != 200) {
				alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
			} else {
				var content = request.responseText;
				// den Inhalt des Requests in das <div> schreiben
				document.getElementById('content').innerHTML = content;
				window.setTimeout(setRequest(), 1000);
			}
			break;
		default:
			break;
	}
}

Rauskommen tut aber anscheinend eine Endlosschleife, die ca. jede Millisekunde eine Anfrage stellt...
Wieso macht er das? Ich hab ihm doch 1000ms bei window.setTimeout gegeben!?
 
Zuletzt bearbeitet:
Du übergibst setTimeout nicht den Parameter setRequest(), sondern das Ergebnis dieser Funktion - ergo wird ohne Verzögerung setRequest ausgeführt... Korrekt:
Code:
window.setTimeout("setRequest()", 1000);
 
Ohhh, tatsächlich. Dankeschön, hatte mich schon gewundert...
(Recht ungewohnt einen Funktionsnamen als String zu übergeben^^)
So macht das ganze aber Sinn
 
Zurück
Oben