如何将ajax放入循环中?

我在循环内的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总是得到最后一个。

注意:变量input_files是一个包含id的数组,例如“my_id_number_9”。 最后一个9是我想要的分裂。

使用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); } 

问题是在异步回调方法中使用闭包变量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]给出undefined作为值

所提出的解决方案将为循环的每次迭代创建一个私有闭包,这将保留在闭包内声明的变量的值,而不是修改其他循环。

尝试关闭function

 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); }