我正在尝试遍历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/