希望下面的内容很接近,但我觉得我做错了第一部分。
理想的结果是status-remote.php每2秒轮询一次,而不是缓存(因此是随机的nocache变量)。
如果相关,则php文件有两个变量,其状态决定了该页面的可见性。
<script id="status" type="text/javascript"></script>
<script type="text/javascript">
var nocache = Math.random();
setInterval(
document.getElementById('status').src = '/status-remote.php?sid=2&random='+nocache;
}, 2000);
</script>
非常感谢您一起来看看!
答案 0 :(得分:1)
我认为你应该在Math.random()
方法中拨打setInterval
像这样:
<script type="text/javascript">
setInterval("var nocache = Math.random();
document.getElementById('status').src =
'/status-remote.php?sid=2&random='+nocache;", 2000);
答案 1 :(得分:1)
您可以使用(隐藏的)iframe并让status-remote.php返回带有元标题的html文档:
<meta http-equiv="refresh" content="2" />
然后通过主文档中的javascript解析响应。
编辑:为防止缓存,我建议发送相应的HTTP标头。
edit2:我错过了它是一个http-equiv元头,所以你可以发送一个HTTP刷新头。
Refresh: 2; url=http://www.example.com/
这也意味着您不必发送HTML内容。此外,在HTTP中,您可以指定延迟和要转到的URL(如果您真的想要使用status-remote?random=random_number
缓存防止的东西)
答案 2 :(得分:0)
我建议使用http://socket.io/,它会降级到所有浏览器并使用功能检测使用最佳可用选项。
答案 3 :(得分:0)
(因此随机nocache变量)
我认为你用这种方式用很多废话来填充用户的浏览器缓存。您应该发送正确的标头来绕过缓存(对代理也更好)。
//Set no caching
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
性能/可伸缩性(可能)很糟糕(特别是如果负载不在内存中)。我想如果你能,你应该真的避免投票。一些解决方案可以防止这种情况: