2016-08-16 28 views
0

ユーザーがサーバーを再起動できるWebページがあります。ユーザーが「再起動」ボタンをクリックすると、「再起動してください...」という一時的なページが表示されます。サーバーがオフラインのときにAjaxリクエストが送信されない

この「再起動中」ページでは、サーバーが再起動して、サーバーが再びオンラインになったときにユーザーをメインページにリダイレクトするかどうかを自動的に確認します。

<!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>
は、基本的には、ページが10秒間待機し、毎秒Ajaxリクエストでサーバにpingを開始します。以下は、これを達成するための私の試みです。サーバーが応答すると、メインページが表示されます。

ただし、Chromeデベロッパーツールで見ると、サーバーがオフライン(再起動など)中にAjaxリクエストが送信されることはありません。再起動を偽った場合(サーバがオフラインにならないように)、すべて正常に動作します。何か案は?

答えて

0

私はここで何が起こっていると思います。サーバーはこのページをユーザーに返し、すぐに再起動して、ユーザーのブラウザーにページが完全にロードされないことがあります。ページが完全にロードされていないため、Ajaxチェックは開始されません。

setTimeout(checkPageReadyInLoop、10000)をセクションの最後に移動することでこれを解決しました。私はChrome、IE、FFでテストし、魔法のように動作します。

これが適切な解決策であるかどうか疑問です。

関連する問題