2016-03-18 7 views
3

Ich habe nach einer Lösung gesucht, die die Seite in einem bestimmten Intervall neu lädt, aber nur wenn der Server, von dem diese Seite kommt, die Seite liefern kann. Netzwerkprobleme, Serverprobleme usw. sollten verhindern, dass die Seite versucht, neu zu laden. Ich bin ein wenig überrascht, dass es nicht mehr eine fertige Lösung gibt, da es scheint, dass dies das bevorzugte Verhalten ist, anstatt eine leere Seite mit einer Fehlermeldung zu laden.periodisches erneutes Laden der Webseite, aber nur wenn die Seite verfügbar ist

Ich habe versucht, zu einer Lösung hinzuzufügen, auf bereits auf Stackoverflow:

Javascript: Check if server is online?

aber ich während sie in regelmäßigen Abständen nicht neu zu laden, es hört nicht auf, wenn das Netzwerk nicht funktioniert, neu zu laden versuchen, (I WLAN ausschalten, um dies zu simulieren). Ich habe nicht versucht, ein Serverproblem zu simulieren.

Hier ist meine nicht-funktionierende Version eines periodischen reload:

function reloadpage() { 
    setTimeout(checkServerStatus, 60000); 
} 

function checkServerStatus() { 
    var img = document.body.appendChild(document.createElement("img")); 
    img.onload = function() { 
     location.reload(true); 
    }; 
    img.src = "http://some/image.jpg"; 
} 
+0

Vielleicht passiert es wegen Caching. Haben Sie versucht, der Bild-URL einen zufälligen Parameter hinzuzufügen? Etwas wie das '' 'img.src =" http: //some/image.jpg? V = "+ (neues Datum()). GetTime();' ' –

Antwort

2

Versuchen Sie, diese

function checkPage(interval) { 
    interval = interval || 10*60*1000; // every 10 minutes 
    setTimeout(function(){ 
     $.ajax({ method: 'HEAD', url: 'http://'}) 
      .done(function(){   // headers retrieved ... it's alive 
       location.reload(); 
      }) 
      .fail(function(){   // sorry we failed 
       checkPage(6000);  // check again but in 1 min 
      }) 
    }, interval); 
} 

checkPage(5*60*1000);     // reload in 5 minutes 

Diese Server-Header nach interval Millisekunden anfordert. Wenn sie ankommen, ist der Server betriebsbereit und wir laden neu. Wenn nicht, überprüfen wir erneut in 1 Minute.

Wenn Sie sicherstellen möchten, dass die Seite vorhanden ist, ändern Sie HEAD in GET und überprüfen Sie, ob der zurückgegebene HTML-Code dem entspricht, was Sie erwarten.

1
function reloadpage() { 
    $.ajax({ 
     url: "your url", 
     type: "GET", 
     complete: function(e, xhr, settings) { 
      if (e.status === 200 || e.status == 304) { 
       location.reload(); 
      } else { 
       alert("server unreacheable. Do not reload"); 
      } 
     } 
    }); 
    setTimeout(reloadpage, 10000); 
} 

setTimeout(reloadpage, 10000); 
+0

Diese Lösung scheint im Falle eines zu funktionieren Internetverbindung getrennt (z. B. WiFi wird auf dem Laptop-Client ausgeschaltet), funktioniert aber nicht, wenn der Server nicht funktioniert (in diesem Fall Tomcat auf dem Server ausschalten). Dann gibt es einen Fehler 503 zurück. Ich habe versucht, das durch Hinzufügen eines || zu beheben e.status == 503 aber daran änderte sich nichts. –

Verwandte Themen