我有一个用户可以重启服务器的网页。一旦用户点击"重启"按钮他看到一个临时页面说"重新启动请等待......"。
我想要这个"重启......"页面自动检查服务器是否重新启动,并在服务器再次联机后将用户重定向到主页面。以下是我尝试实现这一目标:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Rebooting, please wait...</title>
<script type="text/javascript">
function checkPageReady() {
var request = new XMLHttpRequest();
request.open('POST', '/', true);
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200)
window.location = '/';
};
request.send(null);
}
function checkPageReadyInLoop() {
setInterval(checkPageReady, 1000);
}
</script>
</head>
<body onload="setTimeout(checkPageReadyInLoop, 10000);">
Rebooting, please wait...
</body>
</html>
&#13;
基本上,页面等待10秒,并开始每秒使用Ajax请求ping服务器。当服务器响应时,显示主页面。
但是,我通过Chrome开发者工具看到的是,当服务器处于脱机状态(例如重新启动)时,不会发送任何Ajax请求。如果我伪造重启(所以服务器没有脱机)一切正常。有什么想法吗?
答案 0 :(得分:0)
我想我得到了这里发生的事情。服务器将此页面返回给用户并立即开始重新启动,因此页面可能无法在用户的浏览器中完全加载。由于未完全加载页面,因此不会启动Ajax检查。
我通过将调用setTimeout(checkPageReadyInLoop,10000)移动到部分末尾来修复此问题。我在Chrome,IE和FF中对它进行了测试,它起到了魔力的作用。
我想知道这是否是一个合适的解决方案?