Я поставил асинхронную функцию обратного вызова (что-то вроде $.ajax
) внутри цикла for
. Это выглядело более или менее, как (редактирования: обновленный код, см комментарии):JSHint: асинхронная функция в цикле
var i = 0;
for (; i < 5; i++) {
(function(index) {
$.ajax({
url: "",
success: function() {
console.log(index);
}
});
})(i);
}
Он работал, но JSHint дал мне предупреждение о том, что-то вроде:
«Не помещайте функций внутри петель "
Обычно я мог просто разместить свою функцию callback
вне моего цикла и вызвать эту функцию для каждой итерации. К сожалению, мне нужен доступ к переменным, которые назначаются внутри цикла (например, i
). Поэтому я ищу решение, чтобы сделать что-то, как показано ниже:
var i = 0;
function callback(data) {
// I want to have access to "i" (0, 1, 2, 3, 4) and the AJAX "data"
// in this function. But I only have access to "data", because "i"
// will always be 5
}
for (; i < 5; i++) {
$.ajax({
url: "",
success: callback
});
}
Ну, в вашем первом примере 'i' также будет' 5' во всех обратных вызовах. См. [Внутренние циклы закрытия JavaScript - простой практический пример] (http://stackoverflow.com/q/750486/218196). –
У вас есть петля ... вы не можете отправить один запрос со всеми данными? – tymeJV
Просто исправьте цикл for и добавьте эту строку в свой ajax-вызов 'async: false' – Hackerman