jQuery ajax 在每个循环中

jQuery ajax in each loop

我在 $.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),但另一个 returns 三次 3(控制台日志:3、3、3)。其余的都没有问题,我只是在挣扎。有没有人能帮助我?谢谢!

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

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