我使用jquery getScript()调用JS。
有时我可以看到文件已经加载(缓存资源)。 因此,不会删除刷新缓存页面,也会再次加载相同的文件。
由于同一文件的多个包含,我收到错误。
如何避免?
$.getScript("http://localhost:8888//../../demo.js", function()
{
console.log('Script is loaded.');
});
答案 0 :(得分:4)
默认情况下,$.getScript
会将缓存设置设置为false
。尝试将其设置为true
以查看是否可以解决您的问题:
$.ajaxSetup({
cache: true
});
在您的通话之前添加上述内容,如:
$.ajaxSetup({
cache: true
});
$.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); });
直接来自jquery docs:
缓存响应
默认情况下,$ .getScript()将缓存设置设置为false。这个 将带时间戳的查询参数附加到请求URL以确保 浏览器每次请求时都会下载脚本。您 可以通过全局设置缓存属性来覆盖此功能 $ .ajaxSetup():
$ .ajaxSetup({cache:true});或者,您可以定义 一种使用更灵活的$ .ajax()方法的新方法。
示例:示例:定义允许的$ .cachedScript()方法 获取缓存的脚本:
jQuery.cachedScript = function(url,options){ //允许用户设置除dataType,cache和url options = $ .extend(options || {},{之外的任何选项 dataType:“script”, cache:true, url:url}); //使用$ .ajax(),因为它比$ .getScript更灵活//返回jqXHR对象,这样我们可以链接回调返回 jQuery.ajax(options); }; //用法$ .cachedScript(“ajax / test.js” ).done(function(script,textStatus){console.log(textStatus); });
答案 1 :(得分:1)
我相信如果它被缓存,浏览器就不会对它发出新的请求,它会知道加载缓存的版本,所以你很好,只需要你的$ .getScript就可以了。
它可能会再次显示在chrome开发人员工具的网络选项卡中,但时间将为0,而大小(内容)值将显示为“(来自缓存)”这将是一个测试实际情况的好方法
答案 2 :(得分:1)
假设您的demo.js
文件至少包含一个函数或变量,您可以在再次加载之前检查是否存在:
if (typeof(your_variable) === "undefined") {
$.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); });
}
(其中your_variable
是demo.js中函数或变量的名称)
答案 3 :(得分:-2)
Cashingvis好的功能我在之前通过jquery加载时解决了多次加载js的问题。我的问题是当我通过jquery调用文件加载时,我在该加载文件中有一个jquery文件,现在它只加载一次,所以我现在envoje只有一次事件。非常感谢有一个美好的一天。