这是场景。我正在执行 $.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/