理解jQuery $ .getScript()

时间:2012-01-19 16:55:07

标签: jquery

我使用getScript动态加载我的插件:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js', function () {
   //do magic
});
  1. 如何禁用缓存破坏? 目前它在最后生成数字:js / code.photoswipe.jquery-3.0.4.min.js?_ = 1326992601415 我看到了这个,但不知道如何在我的情况下使用它:

    $.getScript = function (url, callback, cache) {
       $.ajax({
          type: "GET",
          url: url,
          success: callback,
          dataType: "script",
          cache: cache
       });
    };
    
  2. 如果我多次调用$ .getScript添加相同的js文件,它每次都会请求获取该文件吗?如果是这样,有没有办法检查我们是否已导入该脚本,所以我们可以避免再次为同一个文件调用getScript?

5 个答案:

答案 0 :(得分:23)

How to disable the cache busting

$.ajaxSetup({
  cache: true
});

这将确保用户只从服务器获取脚本一次,然后从其本地缓存中获取(除非他们的浏览器设置阻止缓存)。

答案 1 :(得分:6)

$ .getScript的jQuery文档说getScript是:

的简写
$.ajax({
  url: url,
  dataType: "script",
  success: success
});

http://api.jquery.com/jQuery.getScript/

这意味着你只需要为它添加一个cache:true参数。

$.ajax({
  url: url,
  cache : true,
  dataType: "script",
  success: success
});

这很简单。 getScript函数没什么特别的,只是简写。

答案 2 :(得分:4)

遗憾的是,答案很简短。

但是,可以像这样覆盖getScript:

$.getScript = function(url, callback, cache){
$.ajax({
        type: "GET",
        url: url,
        success: callback,
        dataType: "script",
        cache: true
});
};

如果你在某个地方包含这个,它不会破坏现有的代码,也会缓存提取的脚本。

<强>优势
使用上面的代码段,您可以为页面上的所有脚本启用缓存。因此,您无需为每个脚本提取重新指定。

答案 3 :(得分:2)

1。 jQuery 1.12.0及更高版本支持选项对象签名:

$.getScript({
    url: "foo.js",
    cache: true
})

2。假设你设置cache:true,文件将从浏览器缓存加载(除非浏览器缓存被禁用或过期,例如当devtools打开时)

答案 4 :(得分:-3)

您的浏览器会相应地缓存网址。所以您不必担心缓存。

如果你想破坏缓存,只需在网址中添加一个随机字符串,如下所示:

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js?' + Math.random(), function () {
        //do magic
});

?' + Math.random()将允许随机数附加到您的js文件,因此每次请求文件时都会中断缓存(因为它会随机生成一个数字)