2011-03-01 102 views
2

我使用Comet实时引擎,名为APE,我使用jQuery刷新PHP图像。起初,我加载图像是这样的:刷新图像PHP和Javascript

<div id="container"> 
<img src="image.php" style='background: url(../assets/load.gif) no-repeat center center;margin-left:42px;' alt=' Loading ...' width="500px" height="300px" /> 
</div> 

,然后当我收到一个事件我这样做:

$("#container").empty(); 
$("#container").html('<img src="image.php?device='+device+'" style="background: url(../assets/load.gif) no-repeat center center;margin-left:42px;" width="500px" height="300px" alt=" Loading ..."/>'); 

设备是我从事件接收无功,因此,例如我得到DEVICE1 ,一切工作正常(图像实际上是一个图表)和标题更改为“设备1”,它绘制了最后5分钟

但是,我的问题是每次我收到一个事件,在这个初始之后,日期仍然在同一个五分钟期间。我的设备每次都是一样的,但是在我的脚本里面,我计算了5分钟前的当前时间,但是这个脚本似乎没有更新图像。它被缓存了吗?

我已经在页面的顶部使用这种尝试:

<?php 
header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
?> 

我可以等待约10分钟,发送一个事件,而在时间段仍然是从最初的负荷,我认为“空()“将清除容器,重新加载图像并因此重新运行脚本。任何建议都会有帮助!

感谢

回答

7

一种常见的方法是一个简单的VAR添加到拥有Unix时间戳查询字符串;浏览器将每次通话视为对独特图像的呼叫。例如

'image.php?device=' + device + '&t=' + Math.round((new Date()).getTime()/1000); 

因此它不认为它有缓存的图像。 (虽然它会继续任何缓存策略导致此问题)

+0

谢谢!我认为这可能是最有意义的 – 2011-03-01 04:59:04

+0

希望它解决了您的问题=) – Shad 2011-03-01 05:05:15

+0

请注意,此方法不会阻止缓存,但相反,当它重新加载页面时,会使用尽可能多的版本填充客户端缓存。这可能是好的,但重要的是要提醒它;-) – Capsule 2011-03-01 13:25:40

2

向图像路径添加一个额外的随机变量。

$("#container").html('<img src="image.php?device='+device+'&rand='+(math.random * 1000000)+'" style="background: url(../assets/load.gif) no-repeat center center;margin-left:42px;" width="500px" height="300px" alt=" Loading ..."/>'); 

这将使它看起来像一个不同的URL,并导致浏览器不缓存。这与YUI使用的策略相同。

+0

非常感谢你们! – 2011-03-01 04:56:54