4

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

不要误会我的意思……我和下一个人一样喜欢缓存。当客户端的缓存和服务器上的文件之间没有时间戳差异时,我希望它缓存。然而,事实并非如此。更奇怪的是……使用相同的函数来加载模板……一些模板文件正在加载更新,而另一些则没有(更喜欢缓存版本而不是最近的更改)。

下面是我使用的加载功能。

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

任何帮助将不胜感激。

新细节:我一直在做一些调试,现在看到返回成功函数的“数据”变量确实具有更新的信息,但由于我尚不清楚插入 DOM 的原因是旧版本. 这到底是怎么发生的,现在成了我的问题。

4

3 回答 3

5

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

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

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

于 2012-05-15T23:12:50.077 回答
2

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

于 2012-05-15T23:15:37.870 回答
0

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

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

  $.ajaxSetup({
    cache: false
  });
于 2016-05-09T20:47:19.087 回答