我有一个需要加载的脚本动态列表,回调函数调用在加载的外部脚本中定义的另一个async函数。
一个脚本对象由{scriptUrl, property}组成
所有脚本都定义了一个externalScriptFunction函数,它接受script['property']作为参数。
for(var i = 0; i < scripts.length; i++) {
var script = scripts[i];
$.getScript(script['scriptUrl'], function() {
externalScriptFunction(script['property'], function someAsyncMethod() {
...
...
});
})
}
我遇到的问题是,在$。getScript回调被执行,for循环已经进入到下一个元素,script['property']来自数组的不同元素。
如何解决这个问题?
- 是否有一些方法传递查询参数到加载的脚本?
- 或者$。getScript完成加载脚本之前移动到下一个项目?
- 还有其他解决方案吗?
谢谢!
你应该传递一个这样的回调函数,
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"]));
}
演示使用闭包- JavaScript闭包是如何工作的?
对于你的例子,它应该是这样的:
for(var i = 0; i < scripts.length; i++) {
var script = scripts[i];
(function(script){
$.getScript(script['scriptUrl'], function() {
externalScriptFunction(script['property'], function someAsyncMethod() {
...
...
});
})
})(script)
}
不确定代码是否实际工作,但我想你明白了吗?
http://jsfiddle.net/vGgpW/