4
$.getScript("somescript.js", function() {
    alert('Load Complete');
});
  1. 加载后,是缓存还是多次引用时再次加载?
  2. 如果一个事件依赖于正在加载的这个文件,如果文件需要更长的时间加载或不加载,该事件是否会延迟失败/超时?
  3. 如果文件由于某种原因无法加载,我该如何检查并执行某些操作?

在此先感谢您的帮助。

4

2 回答 2

6

1)通过 AJAX 对脚本的 jQuery 请求永远不会被缓存,除非您在 $.ajax() 函数中将其指定为选项。从文档中:

“缓存,布尔值

默认值:true,对于 dataType 'script' 和 'jsonp' 为 false

如果设置为 false,它将强制您请求的页面不被浏览器缓存。”

2)我认为我需要查看示例代码来掌握这部分问题。

3)如果 $.getScript() 失败,您将无能为力。但是,您应该知道 $.getScript() 只是 $.ajax() 的简写版本,相当于:

$.ajax({
  url: url,
  dataType: 'script',
  success: function(data) {
    //
  }
});

这意味着您可以实现error回调,以在文件加载失败时做一些聪明的事情,即:

$.ajax({
  url: url,
  dataType: 'script',
  success: function(data) {
    //
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    alert("panic");
  }
});
于 2010-04-26T06:25:41.853 回答
2

除了格伦的回答,我想提供另一种选择:

$.getScript({
    url: "foo.js",
    cache: true // or false, depending on your preference. in most cases you would want it true.
}).done(function(){ 
    // do something when script was loaded and run
}).fail(function(){
    // do something when script failed to load
});

支持 jQuery 1.12.0+

于 2017-07-05T12:45:24.787 回答