jQuery .get缓存工作得太好了?

我正在使用jQuery .get()函数加载模板文件,然后通过定位特定的DOM元素将加载的HTML显示在页面的一部分中。 它运作良好,但我最近意识到的原因让我感到困惑的是它正在缓存我的模板文件并屏蔽我所做的更改。

别误会我的意思……我喜欢和下一个人一样的缓存。 我希望它在客户端缓存和服务器上的文件之间没有时间戳差异时进行缓存。 然而,这不是正在发生的事情。 为了使它更奇怪…使用相同的function加载模板…一些模板文件正在加载更新而其他模板文件没有(更喜欢缓存版本而不是最近的更改)。

下面是我使用的加载function。

function LoadTemplateFile ( DOMlocation , templateFile , addEventsFlag ) { $.get( templateFile , function (data) { $( DOMlocation ).html(data); }); } 

任何帮助将不胜感激。

新细节:我一直在做一些调试,现在看到返回到成功函数的“数据”变量确实有更新的信息但是由于我还不清楚的原因是什么插入到DOM中是旧版本。 如何发生这种情况现在已成为我的问题。

您可以在jQuery.get()调用中将缓存设置为off。 有关cache: false选项的详细信息,请参阅jQuery.ajax() doc。 有关缓存如何工作的详细信息是特定于浏览器的,因此我认为您无法控制它的工作方式,无论是开启还是关闭任何给定的调用。

仅供参考,当您关闭缓存时,jQuery会通过在URL的末尾附加一个唯一的时间戳参数来绕过浏览器缓存,这使得它与之前的任何URL都不匹配,因此没有缓存命中。

您还可以控制服务器上的缓存生存期和其他几个缓存参数,这些参数将设置各种HTTP标头,指示浏览器允许哪种类型的缓存。 在开发应用程序时,您可能希望完全缓存。 对于部署,我建议你想要它,然后当你修改你的应用程序时,最安全的处理缓存的方法是稍微改变你的URL,以便你的URL的新版本不同。 这样,您总能获得最大缓存,但用户也会立即获得新版本。

$ get将始终默认缓存,尤其是在IE上。 您需要手动附加查询字符串, 或使用ajaxSetup方法来破坏缓存。

作为替代方案,我在jQuery文档中发现您可以覆盖默认缓存。 对我来说,我没有必要将所有$ .get转换为$ .ajax调用。 请注意,这也会覆盖所有其他类型调用的默认行为,例如$ .getScript具有与$ .get相同的cache:false默认行为。

https://api.jquery.com/jquery.getscript/

  $.ajaxSetup({ cache: false });