2016-08-16 8 views
0

Ich habe eine Webseite, mit der Benutzer seinen Server neu starten können. Sobald der Benutzer auf "rebooten" klickt, sieht er eine temporäre Seite mit der Aufschrift "Neustart bitte warten ...".Ajax Anfrage nicht gesendet, wenn der Server offline ist

Ich möchte diese "Neustart ..." Seite automatisch überprüfen, ob der Server neu gestartet wird und den Benutzer auf die Hauptseite umleiten, sobald der Server wieder online ist. Unten ist mein Versuch, dies zu erreichen: jede Sekunde

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> 
 
<html> 
 
<head> 
 
\t <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
 
\t <title>Rebooting, please wait...</title> 
 

 
\t <script type="text/javascript"> 
 
\t function checkPageReady() { 
 
\t \t var request = new XMLHttpRequest(); 
 
\t \t request.open('POST', '/', true); 
 
\t \t request.onreadystatechange = function() { 
 
\t \t if (request.readyState == 4 && request.status == 200) 
 
\t \t \t window.location = '/'; 
 
\t \t }; 
 
\t \t request.send(null); 
 
\t } 
 
\t function checkPageReadyInLoop() { 
 
\t \t setInterval(checkPageReady, 1000); 
 
\t } 
 
\t </script> 
 

 
</head> 
 
<body onload="setTimeout(checkPageReadyInLoop, 10000);"> 
 
\t Rebooting, please wait... 
 
</body> 
 
</html>

Grundsätzlich ist die Seite wartet 10 Sekunden und startet Pingen Sie den Server mit Ajax-Anfrage. Wenn der Server antwortet, wird die Hauptseite angezeigt.

Allerdings sehe ich über Chrome Developer Tools, dass während der Server offline ist (z. B. Neustart), keine Ajax-Anfragen gesendet werden. Wenn ich den Neustart vortäusche (damit der Server nicht offline geht), funktioniert alles einwandfrei. Irgendwelche Ideen?

Antwort

0

Ich glaube, ich habe verstanden, was hier vor sich geht. Der Server gibt diese Seite an einen Benutzer zurück und startet sofort den Neustart, sodass die Seite möglicherweise nicht vollständig in den Browser des Benutzers geladen wird. Da die Seite nicht vollständig geladen ist, wird nicht gefeuert und Ajax-Prüfungen werden nie gestartet.

Ich habe das behoben, indem ich den Aufruf setTimeout (checkPageReadyInLoop, 10000) an das Ende des Abschnitts verschoben habe. Ich habe es in Chrome, IE und FF getestet und es funktioniert wie Magie.

Ich frage mich, ob dies eine richtige Lösung ist?

Verwandte Themen