24

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

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

或类似的东西来帮助我实现我所说的......帮助?

4

4 回答 4

52

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

<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 文件,因为它在每次调用中似乎都是不同的文件(由于参数)。

于 2013-02-23T14:34:25.947 回答
9

我最喜欢的一个就是 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

于 2013-02-23T14:36:59.147 回答
2

两种选择:

  1. 将 mySaveFiles.json?t=timestamp 查询参数添加到 url 的末尾。
  2. 使用 XmlHttpRequest 对象拉入文件(您可能仍需要添加时间戳,具体取决于服务器)。
于 2013-02-23T14:35:52.590 回答
-1

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

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="-1">
于 2013-02-23T14:34:38.493 回答