如何防止浏览器中的 Ajax/javascript 结果缓存?

IT技术 javascript ajax caching
2021-03-12 11:33:24

如何防止浏览器缓存 Ajax 结果?我和事件触发的 Ajax 脚本仅在浏览器数据被清除时显示结果。

在 IE6 和 Firefox 3.0.10 中测试

5个回答

随机 URL 有效,但它有点像黑客。HTTP 内置了应该可以工作的解决方案。尝试使用此处指示的解决方案基本上,设置标题:

"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)
我在尝试实施您的解决方案时遇到错误:request header field pragma is not allowed by "access-control-allow-headers"知道如何避免这种情况吗?看: stackoverflow.com/questions/23048184/...
2021-04-26 11:33:24
完美,谢谢。(尽管标头设置在客户端而不是来自服务器的响应中似乎很奇怪!)
2021-04-28 11:33:24
当通过查询字符串传递随机数时,我进行的调用将失败。我没有构建服务,但它似乎试图解释每个参数。这是完美的解决方案,谢谢!
2021-05-04 11:33:24
我们遇到了new Date(0)请求失败的问题,因为对于俄罗斯用户来说日期格式无效。所以最好自己写一些日期,比如:"Wed, 21 Oct 1970 07:28:00 GMT"而不是使用new Date(0)
2021-05-12 11:33:24

向您发送的 URL 添加一个随机查询字符串。

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

...你可以在javascript中生成随机字符串,例如:Math.floor(Math.random() * 1000000)
2021-04-21 11:33:24
此解决方案有一个严重的缺点:如果您检索许多文件,它会填满缓存。就我而言,我想保留缓存以供离线使用,因此我不想用旧版本的请求填充它。
2021-05-03 11:33:24

我使用了 jQuery {cache: false} 方法,它的作用就像一个魅力。

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

$.ajaxSetup({cache: false});
ajaxSetup 仅适用于 ajax 调用。对于其他 JS 调用,您可能需要添加 querystring random string hack。
2021-04-28 11:33:24
我在新的 XMLHttpRequest(); 之前添加了它。它就像一个魅力!
2021-05-03 11:33:24

我知道有两种技术可以做到这一点。

  • 向 AJAX 请求 URL 添加某种查询字符串,使其始终唯一。毫秒时间戳(可能与随机值结合)对此有好处
  • 在 AJAX 响应上设置 HTTP 缓存控制标头,以便浏览器不缓存它

使用 jQuery,您可以设置全局 ajax 设置:{缓存:假}。jquery ajax 文档中查看