我在循环内的ajax请求中有一个ajax请求。这是:
for (var i = 0; i < input_files.length; i++) {
$.ajaxFileUpload({
url : dasdasdsa,
success : function () {
$.ajax({
var get_the_number_in_the_last_of_array = input_files[i].split('_').pop();
});
}
});
}
使async: false
无效。如何解决这个问题?我想要的是内部ajax的每个循环都得到正确的变量i
。我的代码中发生的事情是内部ajax总是得到最后的i
。
注意:变量input_files
是一个包含id的数组,例如“my_id_number_9”。最后一个是我希望分裂的那个。
答案 0 :(得分:4)
使用closure
传递i
-
for (var i = 0; i < input_files.length; i++) {
(function (index) {
$.ajaxFileUpload({
url : dasdasdsa,
success : function () {
$.ajax({
var get_the_number_in_the_last_of_array = input_files[index]
.split('_').pop();
});
}
});
})(i);
}
答案 1 :(得分:2)
问题是在异步回调方法中使用了闭包变量i
。
由于input_files
是一个数组,您可以使用$ .each()轻松修复它
$.each(input_files, function (idx, file) {
$.ajaxFileUpload({
url: dasdasdsa,
success: function () {
$.ajax({
var get_the_number_in_the_last_of_array = file.split('_').pop();
//or var get_the_number_in_the_last_of_array = input_files[idx].split('_').pop();
});
}
});
})
问题...在ajax回调方法中使用了变量i
,它在外部闭包范围内声明,因此所有ajax请求回调方法共享同一个i
实例。现在发生的事情是,由于请求是异步的,循环在执行回调之前完成,因此当执行回调时i
将等于input_files
,这将导致input_files[idx]
未定义为价值
建议的解决方案将为循环的每次迭代创建一个私有闭包,它将保留闭包内声明的变量值,而不是修改其他循环。
答案 2 :(得分:0)
尝试关闭功能
for (var i = 0; i < input_files.length; i++) {
(function(i)
{
$.ajaxFileUpload({
url : dasdasdsa,
success : function () {
$.ajax({
var get_the_number_in_the_last_of_array = input_files[i].split('_').pop();
});
}
});
})(i);
}