2009-10-08 36 views
2

我有一个使用AJAX广泛使用的PHP/Javascript编写的应用程序。我担心为我们的组织设置的“自动”IE7和IE8的默认缓存行为会让我的应用程序更糟糕。针对IE7和iE8的PHP Ajax缓存

大约有1500个用户,我的IT部门表示他们不会为所有这些用户更改IE中的缓存选项。

我的问题是:如何确保如果我对应用程序进行更改,所有用户都会立即看到该更改?

另外,我该如何保证AJAX总能带回新鲜的结果?我真的不得不求助于让每个电话都具有唯一的URL吗?

在互联网上似乎对这个话题有相当多的不确定性。必须有一个始终有效的明确答案。

更多问题

为什么不只是设置在AJAX文件中的HTTP头做的伎俩?

另外,我怎么知道这些解决方案真的工作?什么是测试缓存行为的正确过程?

回答

1

尝试增加这些标题:

header("Cache-Control: no-cache, must-revalidate"); 
header('Pragma: no-cache'); 

也可能通过在查询字符串中的RAND码和或时间()?

0

使URL唯一并不是一个巨大的开销。您只需在网址的末尾添加随机数字即可。在GET请求的情况下,您可以这样做

/someresource.php?some_key=foo&no_cache=9832742938642 

您可以在任何处理请求的脚本中忽略rand键值对。

据我所知,这是你唯一的选择。

3

如果您要在每个查询的末尾附加一个缓存破坏唯一标识符,请不要使用rand。改为使用当前日期/时间(以毫秒为单位)。这保证了唯一性,也更便于调试。

0

使用jQuery你可以添加一个额外的参数,以避免这样的缓存:

$.getJSON(myUrl, {"no_cache": new Date().getTime()}, function(data) { 
// do something 
} 


$.getJSON(myUrl, {"no_cache": new Date().getTime()}, function(data) { 
// do something else 
}