这应该是简单的,但许多旧的答案,所以似乎有点错误。我希望能够异步加载库、插件和代码,但要确保它们是按照顺序执行的。
这类事情不起作用,因为脚本在加载时就会执行,这可能不是按照列出的顺序执行的:
if (someCondition) {
$.ajax({
url: "theLibrary.js",
dataType: "script",
cache: true,
success: function(data) {
console.log("library loaded and executed");
}
});
$.ajax({
url: "thePlugin.js",
dataType: "script",
cache: true,
success: function(data) {
console.log("plugin loaded and executed");
}
});
$.ajax({
url: "theCode.js",
dataType: "script",
cache: true,
success: function(data) {
console.log("code loaded and executed");
}
});
}第一个尝试可能是在回调中嵌套依赖项,如下所示:
if (someCondition) {
$.ajax({
url: "theLibrary.js",
dataType: "script",
cache: true,
success: function(data) {
console.log("library loaded and executed");
$.ajax({
url: "thePlugin.js",
dataType: "script",
cache: true,
success: function(data) {
console.log("plugin loaded and executed");
$.ajax({
url: "theCode.js",
dataType: "script",
cache: true,
success: function(data) {
console.log("code loaded and executed");
}
});
}
});
}
});
}现在,这解决了执行问题(尽管读起来很难),但问题是,在加载和执行前一个脚本时,第二个和第三个脚本的loading被阻塞了。换句话说,加载和执行没有完全解耦。
在.ajax或其速记的继子.getScript中似乎没有延迟执行的选项。从医生那里:
dataType:"script":将响应计算为JavaScript,并将其返回为纯文本。
换句话说,加载和执行似乎是完全耦合的。是否有一种干净的方法来处理这种类型的深度嵌套依赖关系,只使用jquery,,而不使用额外的脚本加载库。
发布于 2013-05-02 10:41:07
您可以尝试使用Async.js系列方法,尽管最初对于Node.js来说,它也可以在浏览器中工作。
所以基本上你可以做一些事情
async.series([
function(callback){
// do some stuff ...
callback(null, 'one');
},
function(callback){
// do some more stuff ...
callback(null, 'two');
}
],// optional callback
function(err, results){
// results is now equal to ['one', 'two']
});https://stackoverflow.com/questions/13831890
复制相似问题