如何防止浏览器缓存json文件

时间:2013-02-23 14:30:27

标签: javascript html json caching

所以我正在制作这个小项目,我遇到了一些麻烦。有一件事不起作用是浏览器保持缓存包含保存数据的json文件,当我在其他地方更新json时,浏览器返回到它已缓存的旧版json文件并读取它。不幸的是我不想那样。我根本不希望浏览器缓存该文件,以便每次加载页面时,它都会向服务器询问json文件并根据该文件而不是缓存的任何文件进行操作。然而,我希望能够缓存页面上的所有其他内容,但如果必须为此工作而牺牲,那么这是我愿意做出的牺牲。我想在JavaScript中会有一个调用,它会丢弃当前的json文件并再次向服务器询问它或类似的东西

<script src="mySaveFiles.json" cache="no"> 

或某种类似的东西可以帮助我实现我所说的......帮助?

4 个答案:

答案 0 :(得分:40)

最简单的方法是使用一些随机参数附加源字符串,这会在服务器端被忽略

<script src="mySaveFiles.json?nocache=123" ></script>

一种解决方案是使用JavaScript生成脚本元素并附加当前时间,如下所示:

var el = document.createElement( script );
el.src = 'mySaveFiles.json?nocache=' + (new Date()).getTime();
document.head.appendChild( el );

这样,浏览器永远不会缓存JSON文件,因为它在每个调用中看起来都是一个不同的文件(由于参数)。

答案 1 :(得分:6)

我最喜欢的一个是htaccess(如果这对你有用,我看不到)

禁用多个扩展程序的缓存

<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi|json)$">
    Header unset Cache-Control
</FilesMatch>

仅为1个分机禁用缓存

<Files .json>
    Header unset Cache-Control
</Files>

我在这里找到了它:http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips

答案 2 :(得分:2)

两个选项:

  1. 将mySaveFiles.json?t = timestamp查询参数添加到网址末尾。
  2. 使用XmlHttpRequest对象拉入文件(您仍可能需要根据服务器添加时间戳)。

答案 3 :(得分:-1)

如果您不想缓存任何数据,那么您可以使用以下元标记

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="-1">