2013-10-03 75 views
0

我使用jquery getScript()调用JS。如何确保JavaScript只加载一次

有时我可以看到文件已经加载(缓存资源)。 因此,在刷新缓存页面时不会删除,并且同样的文件会再次加载。

由于包含多个相同的文件,我收到错误。

如何避免这种情况?

$.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); });

+0

您是使用动态后端语言还是这些html页面? – Snowburnt

+0

'if(!window.somethingInTheFile)$ .getScript(...);' – epascarello

+0

我正在使用它来编译大豆文件。 – Sridhar

回答

1

我相信,如果它被缓存的浏览器不会去作出一个新的请求时,它会知道加载缓存的版本,所以你是好只是发射了您的$ .getScript你有它。

它可能会再次出现在Chrome开发人员工具的网络选项卡中,但时间将为0并且大小(内容)值将显示为'(来自缓存)'这将是测试实际内容的好方法上。

+0

但在资源(Chrome开发人员工具),我可以找到js加载两次。 – Sridhar

+0

检查网络标签,看看它是否被缓存。 – dezman

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 = 功能(URL,选项){// 允许用户设置任何除外选项对于dataType,cache和url选项= $ .extend(options || {},{ dataType:“script”, cache:true, url:url}); //使用$ .ajax(),因为它比$ .getScript更灵活//返回jqXHR对象,以便我们可以链回调返回 jQuery.ajax(options); }; //用法$ .cachedScript(“ajax/test.js” ).done(function(script,textStatus){console。日志(textStatus); });

+0

我无法理解在ajaxSetup中使用缓存的问题。我只使用getScript来加载脚本。您可以详细阐述一下吗? – Sridhar

+0

只需在拨打电话之前致电设置 – Evan

+0

感谢。 – Sridhar

1

假设你demo.js文件至少包含一个函数或变量,你可以再次加载之前检查存在:

if (typeof(your_variable) === "undefined") { 
    $.getScript("http://localhost:8888//../../demo.js", function() { console.log('Script is loaded.'); }); 
} 

(其中your_variable里面demo.js函数或变量的名称)

-2

Cashingvis的一个很好的功能我解决了多次加载JS时,通过jquery之前加载II。我的问题是当我通过jquery调用一个文件加载时,我在该加载文件中有一个jquery文件,现在它只加载一次,然后我现在只能加载一次。非常感谢你,祝你有美好的一天。