Easy Coding
  Forum Wiki Tagging Projekte Karte RSS
» Start
» All Recent Changes
» Wiki Suche
» Wiki Hilfe

Coder How To's

Algorithmen Informationen

edit SideBar

Neue Wiki Eintrage finden Sie unter easy-coding.de/wiki.

AJAX: Timeout prüfen

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.

ajax-timeout-test.html
  1. <title>AJAX: Timeout prüfen</title>
  2. <script type="text/javascript">
  3. <!--
  4. // globale Variablen
  5. var timeout = 2000; // in Millisekunden
  6. var timer;
  7.  
  8. // AJAX Objekt initialisieren
  9. try {
  10.         req = window.XMLHttpRequest?new XMLHttpRequest():
  11.                 new ActiveXObject("Microsoft.XMLHTTP");
  12. } catch (e) {
  13.         //Kein AJAX Support
  14. }
  15.  
  16. /**
  17. * zerstört den AJAX Request und schreibt eine Fehlermeldung
  18. */
  19. function timeoutCheck() {
  20.         req = null;
  21.         document.getElementById('j').innerHTML += 'error';
  22. }
  23.  
  24. /**
  25. * lädt Inhalt von status.php - inkl. Timeout Behandlung
  26. */
  27. function ajax() {
  28.         // Timer beginnen
  29.         timer = window.setTimeout("timeoutCheck()", timeout);
  30.  
  31.         // Readystate behandlung
  32.         req.onreadystatechange = function() {
  33.  
  34.                 if ((req.readyState == 4) && (req.status == 200)) { // Hier Status ändern?
  35.                         // Hier Timer beenden
  36.                         window.clearTimeout(timer);
  37.                         document.getElementById('j').innerHTML += 'readyGo';
  38.                 }
  39.         }
  40.  
  41.         // Request an URL senden
  42.         req.open('GET', 'status.php');
  43.         req.send(null);
  44. }
  45. //-->
  46. </script>
  47. </head>
  48. <body onload="ajax()">
  49.  
  50. <div id="j">Loading...</div>
  51.  
  52. </body>
  53. </html>
Zuletzt geändert am 09.08.2007 18:35 Uhr
  Impressum