Ajax 服务器离线时未发送请求

Ajax request not sent when the server is offline

我有一个网页,用户可以通过该网页重新启动他的服务器。一旦用户点击 "reboot" 按钮,他就会看到一个临时页面显示 "rebooting please wait..."。

我希望此 "rebooting..." 页面自动检查服务器是否重新启动,并在服务器再次联机后将用户重定向到主页。以下是我为实现这一目标所做的尝试:

<!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>

基本上页面会等待 10 秒,然后开始每秒用 Ajax 请求 ping 服务器。当服务器响应时,主页就会显示出来。

然而,我通过 Chrome 开发人员工具看到的是,当服务器处于离线状态(例如重新启动)时,不会发送任何 Ajax 请求。如果我假重启(这样服务器就不会脱机),一切正常。有什么想法吗?

我想我知道这里发生了什么。服务器 returns 将此页面发送给用户并立即开始重新启动,因此该页面可能无法在用户的浏览器中完全加载。由于页面未完全加载,因此未触发并且 Ajax 检查从未开始。

我通过将调用 setTimeout(checkPageReadyInLoop, 10000) 移动到本节末尾来解决此问题。我在 Chrome、IE 和 FF 中对其进行了测试,它的效果非常好。

我想知道这是否是一个合适的解决方案?