服务器脱机时不发送Ajax请求

时间:2016-08-16 14:43:23

标签: javascript html ajax settimeout setinterval

我有一个用户可以重启服务器的网页。一旦用户点击"重启"按钮他看到一个临时页面说"重新启动请等待......"。

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



<!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;
&#13;
&#13;

基本上,页面等待10秒,并开始每秒使用Ajax请求ping服务器。当服务器响应时,显示主页面。

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

1 个答案:

答案 0 :(得分:0)

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

我通过将调用setTimeout(checkPageReadyInLoop,10000)移动到部分末尾来修复此问题。我在Chrome,IE和FF中对它进行了测试,它起到了魔力的作用。

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