jQuery在回调函数中使用闭包来操作$ getJSON数据

时间:2013-02-03 21:56:45

标签: jquery callback closures

这真的让我:

for(var i=0; i<10; i++) {
   (function(x) {     //use a closure to hold the "i" value
       request(arg[x], function(n) {
          //do something with the data returned from $getJSON
          console.log(n);
       });
   })(i)  //is this syntax correct?
}

function request(argX, callback) {    //is this syntax correct?
     $getJSON(parameter) { 
         //get request result
         ... 
     }
     callback(); //after request() function is completed, trigger the callback function
                 //is this syntax right? 

}

我使用回调函数的原因是因为我想操纵getJSON的结果,所以我需要等待请求函数完成。

我还需要将回调函数与循环索引“i”值绑定。

我已经播放了很长一段时间的语法,但是怎么没有从控制台日志中返回任何内容?似乎在$ getJSON完成之前,回调函数从未执行或执行过。

我需要专家的帮助!

2 个答案:

答案 0 :(得分:2)

当ajax调用完成后,您需要执行回调函数:

for(var i=0; i<10; i++) {
   (function(x) {
       request(arg[x], function(n) {
          console.log(n);
       });
   })(i);
}

function request(argX, callback) {
     $.getJSON('/url/json/', callback); //reference callback function
}

答案 1 :(得分:2)

getJSON调用是异步的,因此您需要在响应到达之前调用callback函数。

在调用getJSON之后,您还有一个代码bloack。在结果到达之后,代码将不会被调用,它只是在调用之后运行的单独块,也是在结果到达之前。

将回调函数作为参数放入getJSON

的调用中
function request(argX, callback) {
  $getJSON(parameter, callback);
}