javascript - 使用 jQuery 向页面动态添加脚本从不使用缓存文件

标签 javascript jquery

我正在使用 jQuery 将脚本动态添加到我的页面并且它可以工作,但是 jQuery 将“_=TIMESTAMP”附加到 URL 导致浏览器从不使用缓存。使用以下代码:

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script>
</head>
<body>
    <script type="text/javascript">
        $("head").append('<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js"></scr' + 'ipt>');
    </script>
</body>
</html>

我可以在 firebug 中看到请求的 URL 是:

https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js?_=1313291978667

有谁知道如何告诉 jQuery 不要这样做?

谢谢

最佳答案

要回答您的原始问题,您会看到附加的时间戳,因为 jQuery by defaultscriptjsonp 调用设置 cache: false,后者将时间戳附加到 URL。

为了避免时间戳,你可以这样做:

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
  if ( options.dataType == 'script' || originalOptions.dataType == 'script' ) {
      options.cache = true;
  }
});

这会设置一个全局的 prefilter对于所有 $.ajax 调用,包括 jQuery 在请求 script 时进行的调用。

我们检查 dataType 以确保我们不会无意中针对其他 ajax 调用并将 cache 显式设置为 true。这将避免时间戳附加问题。

您现在可以使用您的原始代码,它会从缓存中获取它。

关于javascript - 使用 jQuery 向页面动态添加脚本从不使用缓存文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7054795/

相关文章:

php - 从 View 调用 Controller 方法

javascript - 在 IF 中设置时,从 else 语句获取间隔 ID

javascript - Internet Explorer 抛出 SCRIPT5022 : HierarchyRequestError when trying to appendChild an HTML object from another window

javascript - ThreeJs 立方体每个面的 Material 不同

javascript - 如何从执行 Stripe Integration 的 Controller 中获取 DOM 元素?

javascript - 如何确保所有 JavaScript 错误都写入 Chrome 开发者工具控制台?

javascript - $(window).load() block 中的 jQuery 事件在 firebase 上托管后不起作用

javascript - 根据彼此自动更改 2 个字段

javascript - 将多个 .php 文件加载到一个 div 中

javascript - JQuery Show 不适用于某些元素