我正在尝试遍历AJAX调用,但令我惊讶的是我的循环无法正常工作。

for (var i = 0; i < lengthTotal; i++) {
    $.ajax({
        dataType: "json",
        url: "{{action('ReportingController@getDailystats')}}/" + getCampaign[i] + "/" + getStartDates[i] + "/" + getEndDates[i]
    }).done(function(resultThree) {
        console.debug(i) //is always 2
        $(resultThree).each(function(index2, value2){
            barTable = [ getCampaignName, value2.impressions, value2.clicks ];
            xBYxTable($('tbody#stats'), barTable);
            //valueInside++;
        }); // End resultthree
    });  //End Done
}

最佳答案

这不是在循环内部创建函数的最佳实践。

尝试这个:

for (var i = 0; i < lengthTotal; i++) {
    (function (i) {
        $.ajax({
            dataType: "json",
            url: "{{action('ReportingController@getDailystats')}}/" + getCampaign[i] + "/" + getStartDates[i] + "/" + getEndDates[i]
        }).done(function (resultThree) {
            console.debug(i) //is always 2
            $(resultThree).each(function (index2, value2) {

                barTable = [getCampaignName, value2.impressions, value2.clicks];

                xBYxTable($('tbody#stats'), barTable);
                //valueInside++;
            }); // End resultthree

        }); //End Done
    })(i);
}


这项工作的原因是closures。即使退出函数,内部函数也可以访问外部函数的变量。此处,更改i循环内的for直到ajax的响应出现。通过使用closure,将i复制到函数的局部变量中。

关于javascript - 遍历ajax调用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29939357/

10-17 02:05