我有一个需要加载的动态脚本列表,回调函数调用加载的外部脚本中定义的另一个异步函数。
脚本对象由{scriptUrl,property}
组成所有脚本都定义了一个externalScriptFunction函数,它将脚本['property']作为参数。
for(var i = 0; i < scripts.length; i++) {
var script = scripts[i];
$.getScript(script['scriptUrl'], function() {
externalScriptFunction(script['property'], function someAsyncMethod() {
...
...
});
})
}
我遇到的问题是,在执行$ .getScript回调之前,for循环已经前进到下一个元素,而脚本['property']来自数组的不同元素。
如何解决此问题?
谢谢!
答案 0 :(得分:1)
只使用闭包 - How do JavaScript closures work?
所以对于你的例子,它应该是这样的:
for(var i = 0; i < scripts.length; i++) {
var script = scripts[i];
(function(script){
$.getScript(script['scriptUrl'], function() {
externalScriptFunction(script['property'], function someAsyncMethod() {
...
...
});
})
})(script)
}
不确定该代码是否真的有效,但我认为你有这个想法?
答案 1 :(得分:1)
你应该传递一个像这样的回调函数,
var loadedCallback = function(extraData) {
return function(data, textStatus, jqxhr) {
externalScriptFunction(extraData, function someAsyncMethod() {
...
...
});
}
}
for(var i = 0; i < scripts.length; i++) {
var script = scripts[i];
$.getScript(script['scriptUrl'], loadedCallback(script["property"]));
}