计算ajax请求

时间:2015-01-14 10:42:22

标签: jquery ajax

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

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循环的索引。

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

1 个答案:

答案 0 :(得分:1)

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

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