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



我有一个需要加载的脚本动态列表,回调函数调用在加载的外部脚本中定义的另一个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/

最新更新