【问题标题】:Questions about jQuery's getScript()关于 jQuery 的 getScript() 的问题
【发布时间】:2010-04-26 06:20:14
【问题描述】:
$.getScript("somescript.js", function() {
    alert('Load Complete');
});
  1. 一旦加载,是缓存还是被多次引用时再次加载?
  2. 如果某个事件依赖于正在加载的此文件,如果文件加载时间更长或无法加载,该事件是否会因失败/超时而延迟?
  3. 如果文件由于某种原因无法加载,我该如何检查和处理?

提前感谢您的帮助。

【问题讨论】:

    标签: javascript jquery external getscript


    【解决方案1】:

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

    "缓存,布尔值

    默认值: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");
      }
    });
    

    【讨论】:

    • #2 的示例:$('a[rel*=facebox]').facebox() — 所以它会先加载文件,然后再加载 facebox(灯箱)?
    • @Nimbuz:99% 肯定,是的。虽然这很可能是特定于浏览器的。
    【解决方案2】:

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

    $.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+ 上支持

    【讨论】:

      猜你喜欢
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      相关资源
      最近更新 更多