用于IE7和iE8的PHP Ajax缓存

时间:2009-10-08 10:16:47

标签: php ajax caching internet-explorer-8 internet-explorer-7

我有一个用PHP / Javascript编写的应用程序,它广泛使用AJAX。我担心IE7和IE8为我们组织设置的默认缓存行为,“自动”会破坏我的应用程序。

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

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

另外,我怎样才能保证AJAX能够带来全新的效果?我是否真的不得不在每次通话时使用我的所有网址?

互联网上似乎存在相当多的不确定性。必须有一个确定无误的答案。

更多问题

为什么不在AJAX文件中设置HTTP标头呢?

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

5 个答案:

答案 0 :(得分:3)

如果要在每个查询的末尾附加缓存清除唯一ID,则不要使用rand。改为使用当前日期/时间(以毫秒为单位)。这保证了唯一性,也更方便调试。

答案 1 :(得分:1)

尝试添加以下标题:

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

也可以在查询字符串中传递一个rand数和/或time()?

答案 2 :(得分:0)

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

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

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

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

答案 3 :(得分:0)

使用POST请求,因为服务器上的数据显然会发生变化(否则您不会遇到缓存问题)。见http://javascript.about.com/od/ajax/a/ajaxgp.htm

答案 4 :(得分: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
}