2016-08-16 92 views
0

我有一个用户可以重新启动服务器的网页。一旦用户点击“重新启动”按钮,他会看到一个临时页面,提示“重新启动,请稍候......”。服务器脱机时不发送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请求每秒服务器。当服务器响应显示主页面时。

但是我通过Chrome开发者工具看到的是,当服务器处于脱机状态(例如重新启动)没有Ajax请求被发送过。如果我假装重新启动(所以服务器没有脱机)一切正常。有任何想法吗?

回答

0

我想我在这里发生了什么。服务器将此页面返回给用户并立即开始重新启动,因此该页面可能无法完全加载到用户的浏览器中。由于页面未被完全加载,所以不会被触发,Ajax检查也不会启动。

我由呼叫的setTimeout(checkPageReadyInLoop,10000)移动到部分的一端固定这一点。我在Chrome,IE和FF中测试过它,它的功能非常神奇。

我不知道这是一个合适的解决方案吗?