每个循环中的jQuery ajax

每个循环中的jQuery ajax,jquery,ajax,loops,each,Jquery,Ajax,Loops,Each,我在$each循环中获取成功函数(ajax)中的值时遇到问题 我有这样的想法: var test = []; $.each(images, function(index){ var formData = new FormData(); formData.append('image', images[index]); $.ajax({ url: 'http://localhost/admin/api/offers/upload_photo',

我在$each循环中获取成功函数(ajax)中的值时遇到问题

我有这样的想法:

var test = [];
$.each(images, function(index){
    var formData = new FormData();
    formData.append('image', images[index]);

    $.ajax({
        url: 'http://localhost/admin/api/offers/upload_photo',
        data: formData,
        cache: false,
        contentType: false,
        processData: false,
        type: 'POST',
        beforeSend: function(){
            console.log(test.length);               
            test.push(images[index]);       
        },
        success: function(){
            console.log(test.length);
        }
    });
});  

beforeSend的输出工作正常(控制台日志:0、1、2),但另一个返回三次3(控制台日志:3、3、3)。其余的工作没有问题,我只是在与之斗争。有谁能帮助我吗?谢谢

默认情况下,AJAX请求是异步的。这意味着它会将请求发送到服务器,但不会等待响应返回后再继续执行代码。因此,
$.each()
循环发送所有三个AJAX请求,并立即执行它们的所有
beforeSend:
函数。
success:
函数在处理响应之前不会执行,直到代码返回到主浏览器事件循环


由于所有
beforeSend:
函数都是在处理任何响应之前执行的,因此执行
success
函数时,
test
数组将填充所有图像。所以他们都会看到
test.length==3

似乎它正在做它应该做的事情。似乎在任何
成功
函数启动之前,
每个循环都完成了。因此,当
success
为其中一个迭代触发时,循环已经完成,
test
的长度为3。这可能是信息性的:这就是为什么ajax是异步的:)正如它的名字所说:)这种行为似乎是合乎逻辑的,并且是预期的。您希望代码做什么?谢谢,我了解AJAX请求是如何工作的,并实现了我的目标。