Friday, July 31st 2009, 7:36pm
Tags
ajax timeout
Abstract
AJAX: Timeout prüfen
Article
Im Gegensatz zu Socket-Objekten, die man aus vielen Programmiersprachen kennt, besitzt das XMLHttpRequest Objekt, das für den AJAX Datenaustausch genutzt wird, kein Attribut zum Setzen der Timeout Zeit.
Das Problem kann man leicht lösen, indem man zu Beginn des AJAX Aufrufs einen Timer setzt. Der Timer ruft dann eine Funktion auf, die aussagt, dass der Timeout abgelaufen ist.
Wenn der AJAX Request vorher fertig geladen ist, wird der Timer abgebrochen.
In diesem Beispiel ist der Timeout als der Zeitpunkt definiert, zu dem dem der Inhalt des AJAX Request fertig geliefert wurde. Alternative Status sind:
0 = uninitialized
1 = loading
2 = loaded
3 = interactive
4 = complete
Die zu ändernde Stelle ist im Quelltext markiert.
|
HTML Code
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<html><head>
<title>AJAX: Timeout prüfen</title>
<script type="text/javascript">
<!--
// globale Variablen
var timeout = 2000; // in Millisekunden
var timer;
// AJAX Objekt initialisieren
try {
req = window.XMLHttpRequest?new XMLHttpRequest():
new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
//Kein AJAX Support
}
/**
* zerstört den AJAX Request und schreibt eine Fehlermeldung
*/
function timeoutCheck() {
req = null;
document.getElementById('j').innerHTML += 'error';
}
/**
* lädt Inhalt von status.php - inkl. Timeout Behandlung
*/
function ajax() {
// Timer beginnen
timer = window.setTimeout("timeoutCheck()", timeout);
// Readystate behandlung
req.onreadystatechange = function() {
if ((req.readyState == 4) && (req.status == 200)) { // Hier Status �ndern?
// Hier Timer beenden
window.clearTimeout(timer);
document.getElementById('j').innerHTML += 'readyGo';
}
}
// Request an URL senden
req.open('GET', 'status.php');
req.send(null);
}
//-->
</script>
</head>
<body onload="ajax()">
<div id="j">Loading...</div>
</body>
</html>
|
Request deletion
report critical content