如果先前的5个ajax函数完成,则执行接下来的5个AJAX函数

时间:2018-05-26 09:23:54

标签: ajax

我有以下代码:

<script type="text/javascript">

    $('#send').click(function({
        var foo = array(1,2,...,50);

        var max = 5;

        for(var i == 0; i < max; i++){
            $.ajax({
                url: '/ajax.php',
                type: 'post',
                data: {
                    id: foo[i]
                }
                ......
        })

    }));


</script>

我希望脚本检查是否完成了五个ajax函数,接下来将执行5个ajax函数。直到foo的所有元素都被发送到ajax.php,这就是它!

我需要你的帮助。我的英语不好,谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

var foo = new Array(50);
var max = 5;
var pointer = 0;

var batchSuccesses = 0;
var batchFailures = 0;


function runNextIfBatchCompleted(){
    if(batchSuccesses+batchFailures == max){
      batchSuccesses = 0;
      batchFailures = 0;
      runPostBatch();
    }
}

function runPostBatch(){
  var currentPointer = pointer;

  for(var i = currentPointer; i < Math.min(max*((currentPointer/max)+1),foo.length); i++){
    $.post('/ajax.php',
       { 'id' : foo[i] }
    )
    .done(function(data){
      batchSuccesses++;
      runNextIfBatchCompleted();
    })
    .fail(function(data){
      batchFailures++;
      runNextIfBatchCompleted();
    })
   pointer++;
  }
}

runPostBatch();

这使用jQuery库提供的jqXHR接口,允许我们在完成5批次时触发done / fail

您可以在此处看到此操作:https://codepen.io/rhericlya/pen/XqvpWp在您的控制台和网络标签中。 (这使用Get而不是Post,但在其他方面是相同的)

你绝对可以提高这段代码的效率,但希望它可以让你知道从哪里开始。