如何确保javascript只加载一次

时间:2013-10-03 16:48:31

标签: javascript jquery

我使用jquery getScript()调用JS。

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

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

如何避免?

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

4 个答案:

答案 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只有一次事件。非常感谢有一个美好的一天。