我在 for
循环中放置了一个异步回调函数(类似于 $.ajax
)。它看起来或多或少像(编辑:更新的代码,请参阅评论):
var i = 0;
for ( ; i < 5; i++ ) {
(function( index ) {
$.ajax({
url: "",
success: function() {
console.log( index );
}
});
})( i );
}
它有效,但 JSHint 给了我一个警告,内容如下:
"Don't place functions inside loops"
通常我可以将我的回调函数放在循环之外,并在每次迭代时调用该函数。不幸的是,我需要访问在循环内分配的变量(例如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
});
}
最佳答案
在这种情况下,您可以使用一个函数来返回一个可以访问您需要的数据的函数。
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)
});
}
但是,使用单个请求提交此数据当然比循环提交更好。
关于javascript - JSHint:循环中的异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25575934/