我知道这是一个老问题,但我认为包含“完成”的两个答案都没有被他们的所有者解释,它们实际上是最好的答案。
投票最多的答案要求使用“async:false”,这反过来会创建一个不是最佳的同步调用。另一方面,自 1.5 版(可能更早?)以来,jquery 引入了 promise 和 promise 处理程序,在这种情况下,我们尝试异步加载脚本并等待它完成运行。
定义的回调getScript 文档
一旦脚本被加载但不一定执行,回调就会被触发。
相反,您需要寻找的是承诺的行为方式。在这种情况下,当您正在寻找一个异步加载的脚本时,您可以使用“then”或“done”看看这个线程,它很好地解释了差异。
只有当一个承诺被解决时才会调用基本完成。在我们的例子中,当脚本成功加载并完成运行时。所以基本上在你的代码中这意味着:
$.getScript("test.js", function() {
foo();
});
应改为:
$.getScript("test.js").done(function(script, textStatus) {
console.log("finished loading and running test.js. with a status of" + textStatus);
});