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 中对其进行了测试,它的效果非常好。
我想知道这是否是一个合适的解决方案?
我有一个网页,用户可以通过该网页重新启动他的服务器。一旦用户点击 "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 中对其进行了测试,它的效果非常好。
我想知道这是否是一个合适的解决方案?