需要一种简单的方法来使用javascript重复轮询文件

时间:2011-02-04 09:21:30

标签: php javascript

希望下面的内容很接近,但我觉得我做错了第一部分。


理想的结果是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>

非常感谢您一起来看看!

4 个答案:

答案 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");

选择一个:

旁注:

性能/可伸缩性(可能)很糟糕(特别是如果负载不在内存中)。我想如果你能,你应该真的避免投票。一些解决方案可以防止这种情况: