javascript - 如何判断链式异步脚本是否已经加载?

标签 javascript jquery amd

这是场景。我正在执行 $.getScript() 函数调用以获取 javascript 文件中的脚本。我从 $.getScript() 下载的脚本尝试下载它所依赖的一些其他脚本。在我的脚本中,我使用 done() 来检查脚本是否完全加载。如果确实如此,那么我尝试调用不在我刚刚从 $.getScript 加载的脚本上的函数,而是在其中加载的脚本上的函数。

它变得令人困惑,所以让我用一些代码来演示:-

//my script.js
$.getScript("http://myexternaljs.com/first.js").done(function(){
    doSecond(); //<- this resides in second.js which is being called in first.js below
}

//first.js
(function(){
    $.getScript("http://firstexternal.com/second.js");
}());

//second.js
function doSecond(){
    return console.log("hello world");
}

这里的问题是 secondary.js 需要一点时间下载,所以我在 上调用 doSecond() 时不断收到 doSecond() is undefined 错误>完成()

我可以使用超时并检查 second.js 是否已加载,但有更好的方法吗?

我也愿意接受任何 AMD 加载程序Promises 答案。

最佳答案

您还可以使用$.ajaxSuccess :

$(document).ajaxComplete(function(ev, jqXhr, options) {
  // You could be as specific as you need to here.
  if ( options.url.match('second.js') ) {
    doSecond();
  }
});

或者,您可以在 ajaxComplete 中执行此操作:

$(document).ajaxComplete(function(ev, jqXhr, options) {
  // You could simplify to 
  // doSecond && doSecond()
  // if you can trust that it will always be a function
  if ( doSecond && $.isFunction(doSecond) ) {
    doSecond();
  }
});

关于javascript - 如何判断链式异步脚本是否已经加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22572795/

相关文章:

javascript - XMLHttpRequest 未正确加载页面

javascript - Backbone 中的路由器分离

javascript - 按值查找数组中的对象并更新整个对象

javascript - 如何在 JQuery 中使用自定义属性向标签添加类?

Dojo:覆盖预加载模块

javascript - 通过两种不同的方法将数据从 HTML 发送到 Servlet

jquery tmpl 默认选项

javascript - 使用 jquery 验证日期并帮助用户

javascript - 在 SuiteScript 2.0 中引用自定义 AMD 模块

node.js - 是否有用于 RequireJS 优化器的 ExpressJS 中间件?