【问题标题】:jQuery keeps putting a cache buster in my CDN scripts?jQuery 不断在我的 CDN 脚本中放置缓存破坏器?
【发布时间】:2014-12-27 08:12:44
【问题描述】:

我有一个脚本,它使用 $.get( ... ) 从我的服务器中提取一段 HTML,并在带有 $.html<div> 中呈现它。有时我在拉取的 HTML 中有<script> 标签,我注意到 jQuery 在对这些脚本的请求中放置了一个缓存破坏器参数,这导致浏览器再次请求已经加载的脚本。

例如:

知道如何禁用此行为吗?

脚本标签没有附加_ 参数,因此问题不是我的HTML。

此外,未使用 $.html 呈现的 <script> 标记不会表现出这种行为。

【问题讨论】:

  • jQuery 的 cachebuster 参数看起来像 _=123456890。无论你看到什么,它都不是来自 jQuery。
  • 呈现的 HTML 代码完全相同。如果使用浏览器请求呈现,则它没有该参数。如果用 $.html 渲染它会。它必须是 jQuery。
  • 我想您看到的是浏览器的 eval() 的内部表示,它用于执行 <script>
  • 不。它是 jQuery。 innerHTML 没有表现出相同的行为:
  • jsfiddle.net/7j5vvk2v 尝试取消注释/注释这些行

标签: javascript jquery html caching


【解决方案1】:

当 jQuery 在 HTML 中看到 <script src="URL"> 标签时,它会在内部使用 $.getScript() 来加载脚本。默认情况下,这会发送一个 cachebuster,但您可以通过调用 $.ajaxSetup() 来覆盖默认的 AJAX 选项。

$(document).ready(function () {
    $.ajaxSetup({
        cache: true
    });
    var x = '<script src="https://d9zdvmiwibsh5.cloudfront.net/js/json.js">';
    $('#test').html(x);
});

DEMO

【讨论】:

  • 这是完美的,但我可以通过什么方式让它为 type=text/javascript 做到这一点?非常感谢!
  • 如果你想要那种级别的控制,你必须自己加载,而不是使用.html()
  • 决定改用 RequireJS,但我会将其标记为已接受,因为您让我走上了正确的轨道:)
  • 如果您使用 $.getJSON(),您可以简单地附加请求的当前时间,例如$.getJSON('/path/to/my/json/file.js?' + new Date().getTime(), function(data) { // 变魔术 });
  • @TimothyDalton 这是一个缓存克星,这是他想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2015-08-15
  • 2020-05-19
  • 1970-01-01
相关资源
最近更新 更多