计数 ajax 个请求

Count ajax requests

我需要计算 ajax 的数量。每个ajax在for里面都是运行(但是我不能使用循环函数的索引)。这是我的代码:

var i = count = 0, formData, blob;

for (/*setting the for loop*/) {
    $.ajax({
        xhr: function(){
            var xhr = $.ajaxSettings.xhr();

            xhr.upload.onprogress = function(evt){
                // here I need to count be 0,1,2,3,4... for every ajax
                console.log('Part'+count+'is being uploaded');
            };

            return xhr ;
        },
        url: 'upload.php',
        type: 'POST',
        data: formData, 
        },
    });
    count++;
}

现在我需要的是获取正在上传哪个部分的信息。它现在的工作方式是计数始终是最后一个 ajax 的数量(原因很明显:计数增加并且进度事件甚至还没有被触发)。

那么有没有办法在其他地方增加计数来实现这一点?同样,我不能使用 for 循环的索引。

注意:代码经过简化,实际代码更复杂。

您可以使用闭包来执行此操作,保存计数的当前值:

for (/*setting the for loop*/) {
    $.ajax({
        xhr: ( // Executing a function with count as currentCount, 
           // then it save the value of count in the returned function (Closure)
          function(currentCount){
            return function(){
                var xhr = $.ajaxSettings.xhr();

                xhr.upload.onprogress = function(evt){
                    console.log('Part'+currentCount+'is being uploaded'); // here I need to count be 0,1,2,3,4... for every ajax
                };

                return xhr;
            };
          })(count)
        ,
        url: 'upload.php',
        type: 'POST',
        data: formData, 
        },
    });
    count++;
}