0

我有一个需要加载的动态脚本列表,回调函数调用加载的外部脚本中定义的另一个异步函数。

一个脚本对象由 {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 在移动到下一个项目之前完成加载脚本的方法?
  • 还有其他解决方案吗?

谢谢!

4

2 回答 2

1

只使用闭包 - 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/

于 2013-01-03T16:32:24.373 回答
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"]));

}

演示

于 2013-01-03T16:33:40.530 回答