使用$ .getScript加载脚本时的查询字符串参数处理

时间:2013-01-03 16:07:38

标签: javascript

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

脚本对象由{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']来自数组的不同元素。

如何解决此问题?

  • 有没有办法将查询参数传递给加载的脚本?
  • 或者$ .getScript在移动到下一个项目之前完成加载脚本的方法吗?
  • 还有其他解决方案吗?

谢谢!

2 个答案:

答案 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)
}

不确定该代码是否真的有效,但我认为你有这个想法?

http://jsfiddle.net/vGgpW/

答案 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"]));

}

DEMO