理解jQuery $ .getScript()

Ste*_*fin 10 jquery

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

$.getScript('js/code.photoswipe.jquery-3.0.4.min.js', function () {
   //do magic
});
Run Code Online (Sandbox Code Playgroud)
  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
       });
    };
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果我多次调用$ .getScript添加相同的js文件,它每次都会请求获取该文件吗?如果是这样,有没有办法检查我们是否已导入该脚本,所以我们可以避免再次为同一个文件调用getScript?

Joh*_*ick 23

如何禁用缓存清除:

$.ajaxSetup({
  cache: true
});
Run Code Online (Sandbox Code Playgroud)

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

  • 警告:这将为每个ajax调用启用缓存,而不仅仅是脚本调用. (2认同)

Kie*_*ran 6

$ .getScript的jQuery文档说getScript是以下的简写:

$.ajax({
  url: url,
  dataType: "script",
  success: success
});
Run Code Online (Sandbox Code Playgroud)

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

这意味着您只需要添加一个cache:true参数.

$.ajax({
  url: url,
  cache : true,
  dataType: "script",
  success: success
});
Run Code Online (Sandbox Code Playgroud)

就那么简单.getScript函数没什么特别的,只是简写.


Jak*_*kub -3

您的浏览器已经相应地缓存了该网址。因此您不必担心缓存。

但是,如果您想破坏缓存,只需向 url 添加一个随机字符串,如下所示:

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

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

  • 不,没有。如果我在同一页面上说 $.getScript onClick ,它会在末尾发送一个具有不同数字的 GET 例如 js/code.photoswipe.jquery-3.0.4.min.js?_=1326992601415 (8认同)
  • @Jakub OP 不想破坏缓存。他想禁用缓存清除。jQuery 的 getScript 默认会破坏缓存。看我的回答。 (7认同)
  • 这是错误的答案,与OP的要求完全相反。 (2认同)