问题
I have many web pages that needs to auto-refresh once a minute. Easily done with META REFRESH or a some javascript. (And yes, the whole pages needs to refresh -- LOTS of content changing).
However, it needs to be as robust as possible. If the web server is momentarily down or there is a network hiccup, it can't refresh and will then get a 404 error, etc and be permanently stuck on the error page.
The only option I can come up with is host the whole page in an IFRAME, and have some script on the parent page fresh the framed page. The frame should be invisible so any resizing of the window would also need to resize the IFRAME.
Is there an easier, more elegant solution? (Going to Flash/AIR/Silverlight also isn't an option because of time constraints).
回答1:
You could load the new content of the page using Ajax. If your page is generated on the server side you can just omit the HTML around the body and only output it's content. You can then receive the new body with Ajax and replace the existing body of the page with body.innerHTML = request.responseText
. In the Ajax callback you can do all kind of error handling you like, even ignore any error and retry the Ajax request.
<html>
<head>
<script type="text/javascript">
function doRequest() {
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == 4) {
if (request.status == 200)
body.innerHTML = request.responseText;
doRequest(); // restart the request
}
}
request.open("get", "", true);
request.send(null);
}
</script>
<body onload="doRequest()">
Page content...
</body>
</html>
回答2:
Google uses the iframe method for gmail. Can't go wrong with google's solution.
回答3:
You can also Use JQUERY load method.
来源:https://stackoverflow.com/questions/3729959/robust-auto-refresh-web-page