我需要多次调用$ .getScript吗?

时间:2013-04-19 09:55:03

标签: jquery getscript

我有两个JavaScript文件:

  1. scripts.js - 完成所有onload设置工作并将事件处理程序附加到控件
  2. map.js - 定义MAP小部件
  3. 加载文档时,scripts.js通过加载map.js并调用MAP来初始化initMap对象:

    /** ON DOCUMENT LOAD **/
    $(document).ready(function() {
    
      $.getScript('lib/map.js', function() {
        /** Generate a new map **/
        MAP = initMap(10,mapDefault);
      });
    

    有一个按钮允许用户重新生成地图,该地图也会调用initMap。例如:

    $('input#regenerateButton').click(function() {
      $.getScript('lib/map.js', function() {
        MAP = initMap($('input#mapSize').val(),mapDefault);
      });
    });
    

    我是否需要再次重新加载脚本map.js,因为此时它可能已经加载了?

    此问题已被问及previously,但我不相信有关$.getScript多次通话的部分已得到解答。

1 个答案:

答案 0 :(得分:2)

默认情况下,$.getScript()函数会破坏缓存 - 这意味着每次执行时都会再次获取文件。仅当js文件不是静态js文件时才有用,即如果它包含一些服务器端代码(例如PHP),它根据会话可用的其他一些数据自定义数据。

如果你有一个静态的js文件,你可以通过这样做来禁用这种行为

$.ajaxSetup({
  cache: true
});

(请注意,这对于所有ajax调用都是全局的。)

如果您的脚本是静态文件,则无需使用其他$.getScript()重新加载脚本。如果您不尝试重新加载它,则无需启用AJAX缓存。

有一个例外,即使它是静态的,也不需要重新加载脚本:如果MAP脚本存储了一些在执行initMap时未重置的信息。那将是糟糕的设计,但在剧本中可能就是这种情况。