Tim Tepaße: XMLHttp.onreadystatechange: ich verstehe es einfach nicht :(

Beitrag lesen

Hallo,

xmlhttp.onreadystatechange=function() {

Hier hängs Du an das XMLHttpRequest-Objekt eine Funktion an, die immer ausgeführt wird, wenn sich der Zustand im Objekt ändert.

xmlhttp.send(null)

Hier „aktivierst“ Du das XHR-Objekt (Die Angabe von null ist übrigens nicht unbedingt notwendig). Das Objekt lebt nun und arbeitet und macht im Hintergrund den Request. Bzw. wird so ausgeführt, dass es sich wie Hintergrund anfühlt. Am besten vergleichst Du das mit verzögert ausgeführten Funktionen, die mit setTimeout() oder setInterval() gesetzt werden. Das XHR-Objekt lebt nun sozusagen getrennt von dem Skriptablauf, der hier direkt folgt:

if(offline){

Hier wird nämlich sofort gefragt ob offline bool'sches Falsch ist. Direkt. Das XHR-Objekt hat zu diesem Zeitpunkt noch keine Änderung an der Variable offline durchgeführt. Die Pizzabäckerin, noch beim Anrühren der Tomatensauce, hat ihren Lehrling mit dem Ausrollen des Teiges beauftragt, wundert sich aber eine Millisekunde später, weswegen da noch kein flacher Teigfladen liegt (da der Lehrling noch am Kneten ist). Die Ausführung der Funktion wartet also nicht auf das XHR-Objekt.

Du willst Deine offline-Abfrage zeitlich erst dann haben, wenn das XHR-Objekt fertig ist. Dann solltest Du diese in der onreadystate-Methode nach dem Zustand 4 abfragen oder von dort eine andere Funktion aufrufen:

~~~javascript xmlhttp.onreadystatechange = function () {
      if (this.readyState == 4) {
          if (this.status == 200) {
              alert("online");
              return;
          } else {
              alert("offline");
              return;
      }
  }

  
  
Tim