我在$.ajax
循环中放置了一个异步回调函数(类似for
)。它看起来或多或少(编辑:更新的代码,请参阅注释):
var i = 0;
for ( ; i < 5; i++ ) {
(function( index ) {
$.ajax({
url: "",
success: function() {
console.log( index );
}
});
})( i );
}
它有效,但JSHint给了我一个警告说:
&#34;不要在循环中放置函数&#34;
通常我可以将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
});
}
答案 0 :(得分:2)
在这种情况下,您可以使用一个函数来返回一个可以访问所需数据的函数。
var i = 0;
function callback( i ) {
return function (data) {
// I want to have access to "i" (0, 1, 2, 3, 4) and the AJAX "data"
// in this function.
console.log(i)
}
}
for ( ; i < 5; i++ ) {
$.ajax({
url: "",
success: callback(i)
});
}
然而,使用单个请求而不是循环来提交此数据当然会更好。