2012-01-19 46 views
10

我使用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?

+0

_If我多次调用$ .getScript多次添加相同的js文件,它是否请求每次获取该文件?_没有缓存,单独的请求被发送,因为缓存破坏。通过缓存,它将从浏览器缓存中加载(浏览器可能会再次检查服务器,以查看它是否具有最新的副本,具体取决于缓存标头的强度)。 –

回答

-3

您的浏览器将缓存相应的URL已经..所以你不必担心缓存。

然而,如果你想胸围缓存只是一个随机字符串添加到URL,像这样:

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

?' + Math.random()将允许一个随机数,以便缓存与每个请求破将追加到您的js文件该文件(因为它随机生成一个号码)

+8

不,它不。如果我在同一页面上说了$ .getScript onClick,它会在最后发送带有不同数字的GET,例如, js/code.photoswipe.jquery-3.0.4.min.js?_ = 1326992601415 –

+0

我想要做的是在最后删除这些数字,并点击检查,如果我已经有该脚本导入,所以我可以只是忽略getScript –

+0

AJAX不使用'导入'脚本的概念。每次都是一个新的调用,不同的是,你可以缓存(或不)这个响应 –

23

How to disable the cache busting

$.ajaxSetup({ 
    cache: true 
}); 

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

+1

警告:这将启用对每个Ajax调用的缓存,而不仅仅是脚本调用。 –

4

不幸的是,你不能。

getScript加入然而,可以覆盖这样的:

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

如果包括这在你的js的地方,它不会破坏现有的代码,并且也将缓存获取脚本。

优势
使用上面的代码中,你可以为你的页面上的所有脚本启用缓存。所以你不需要重新指定每个脚本抓取。

+0

没有必要。 jQuery 1.12.0和更高版本支持将选项对象传递给'$ .getScript',所以你可以在不重写任何东西的情况下使用'.getScript({cache:true,url:url})''。 – oriadam

5

jQuery的文档为$ .getScript说getScript加入是简写:

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

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

这意味着你只需要一个缓存添加:真正的参数了这一点。

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

这样简单。 getScript函数没什么特别的,只是速记。

1

1。 jQuery 1.12。0和更高版本支持选项对象签名:

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

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

+0

缺少jQuery文档缺少此信息。我打开了一个拉取请求来更新它。 – oriadam