我有一个用PHP / Javascript编写的应用程序,它广泛使用AJAX。我担心IE7和IE8为我们组织设置的默认缓存行为,“自动”会破坏我的应用程序。
大约有1500名用户,我的IT部门表示他们不会为所有这些用户更改IE中的缓存选项。
我的问题是:如果我对我的应用程序进行更改,我怎能绝对保证所有用户都会立即看到更改?
另外,我怎样才能保证AJAX能够带来全新的效果?我是否真的不得不在每次通话时使用我的所有网址?
互联网上似乎存在相当多的不确定性。必须有一个确定无误的答案。
更多问题
为什么不在AJAX文件中设置HTTP标头呢?
另外,我怎么知道这些解决方案真的有效?测试缓存行为的正确程序是什么?
答案 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
}