1

我有两个 JavaScript 文件:

  1. scripts.js - 完成所有onload设置工作并将事件处理程序附加到控件
  2. map.js - 定义一个MAP小部件

当文档加载时,scripts.jsMAP通过加载 map.js 并调用来初始化一个对象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,因为此时它可能已经加载了?

这个问题之前已经被问,但是我不相信关于多次调用的部分$.getScript得到了回答。

4

1 回答 1

2

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

如果您有一个静态 js 文件,看起来您有,您可以通过执行禁用此行为

$.ajaxSetup({
  cache: true
});

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

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

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

于 2013-04-19T10:41:02.497 回答