2011-02-04 58 views
1

希望以下是接近,但我觉得我做错了第一部分。
需要一个简单的方法来反复轮询使用javascript的文件


理想的结果是状态-remote.php每2秒被轮询,而没有被缓存(因此非缓存随机变量)。

如果相关,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

我建议使用http://socket.io/,它会降级到所有浏览器,并使用使用功能检测的最佳可用选项。

+0

看起来像是矫枉过正。 – jAndy 2011-02-04 09:27:55

+0

感谢您的建议@macarthy - 看了一下socket.io文档,看起来可能有点矫枉过正(我在这里有一个新手:S)我对我的方式有很大的影响尝试? – Jamie 2011-02-04 09:28:30

1

我想你应该在setInterval方法里面调用Math.random()
事情是这样的:

<script type="text/javascript"> 
    setInterval("var nocache = Math.random(); 
    document.getElementById('status').src = 
    '/status-remote.php?sid=2&random='+nocache;", 2000); 
1

你可以使用一个(隐藏)iframe和都有状态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缓存防止啄去)

0

缓存:

(因此随机非缓存变量)

我认为你用这种方式填满了用户浏览器缓存中的大量垃圾。您应该发送正确的标头来绕过缓存(代理也更好)。

//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"); 

选择一个:

旁注:

性能/可扩展性是(可能)会吸(尤其是如果负载不在内存中)。我想如果你能真的应该避免投票。一些解决方案,以防止这种情况:

相关问题