javascript回调函数结果

时间:2013-02-06 16:23:23

标签: javascript jquery loops callback

for (var i=0; i<10; i++) {
    var box = $('div.container');

    (function(x) {
        request(box[i], function(n) {    
            //question about function(n) here
        }
    })(i)
}

function request(boxContainer, callback) {
    $.getJSON(url, function(data) {
        //dataArray is created here
    }

    boxContainer.innerHTML = '';

    $.each(dataArray, function(idx, v){
        boxContainer.innerHTML += '<div class="output"><h4>..</h4><p>..</p></div>';
    }

    callback(data);
}

request()函数应为for循环中的10个产品中的每一个产生output div容器。

我的问题是:

调用request()函数完成后,当执行回调函数时,是否已创建所有10个div容器,或者只有box[i]的那个是那时创造了吗?

2 个答案:

答案 0 :(得分:1)

您尝试使用closure in the loop是正确的,但您使用了错误的变量名称 - 它应该是x而不是i

for (var i=0; i<10; i++) {
    var box = $('div.container');

    (function(x) {
        request(box[x], function(n) {    
            //question about function(n) here
        }
    })(i)
}

顺便说一下,您对box的选择应该已经移到了循环之外。

答案 1 :(得分:0)

我认为只有box [i]才会在那时创建。对于创建完所有的回调,您可以使用jQuery的promise和deffered system see here(multiple)。或者您可以在代码中维护一个计数器,这样只有在达到目标10后才能执行某些代码。

也许是这样的     var target = counter = 10,data = {};     for(var i = 0; i

    (function(x) {
        request(box[x], function(n) {
            data[x] = n;
            if(--counter == 0) {
                //all are done
            }
        }
    })(i)
}