2009-06-04 115 views
9

如何防止浏览器缓存Ajax结果?只有当浏览器数据被清除后,我才有事件触发Ajax脚本才能显示结果。如何防止浏览器中的Ajax/javascript结果缓存?

在IE6和Firefox 3.0.10

+2

实际上,这是一个非常有据可查的问题。如果你是谷歌的话,我相信你可以找到一个非常全面的答案。 – jrharshath 2009-06-04 06:27:40

回答

11

测试出随机查询字符串添加到您发送的网址。

例如如果Ajax请求被发送到“http://www.xyz.com/a” 然后在末尾添加一个随机字符串:“http://www.xyz.com/a?q=39058459ieutm39

+3

...你可以在javascript中生成随机字符串,例如:Math.floor(Math.random()* 1000000) – Manne 2009-06-04 06:21:47

+2

该解决方案有一个严重的缺点:如果您检索多个文件,它会填充缓存。在我的情况下,我想保留缓存以供离线使用,所以我不想用旧版本的请求填充缓存。 – 2014-04-14 00:11:52

4

有两种技术对于这一点,我所知道的。

  • 将某种查询字符串添加到AJAX请求URL,以便它始终是唯一的。一毫秒时间戳(或许还有一个随机值相结合)有利于对AJAX响应这个
  • 设置HTTP缓存控制头,使浏览器不缓存它
13

随机URL的作品,但它是一种的黑客。 HTTP有解决方案,应该可以工作。尝试使用解决方案indicated here。基本上,设置标题:

"Pragma":   "no-cache", 
"Cache-Control":  "no-store, no-cache, must-revalidate, post-check=0, pre-check=0", 
"Expires":   0, 
"Last-Modified":  new Date(0), // January 1, 1970 
"If-Modified-Since": new Date(0) 
+0

完美,谢谢。 (虽然看起来很奇怪,头文件在客户端设置而不是在服务器的响应中!) – 2010-05-11 03:04:04

8

我已经使用jQuery {缓存:false}方法,它的工作就像一个魅力。

完整的代码示例是这样的:

$.ajaxSetup({cache: false});