我在JavaScript中有一个数组jobs,想发送到服务器端进行一些处理,由于它是一个很大的数组,为了避免超时,我将其切成小块,例如smallerJobs

var chunk= 50;
for (var i=0; i<jobs.length; i+=size) {
    var smallerJobs = jobs.slice(i,i+size);

    $.post( "server.php", { jobs: smallerJobs })
      .done(function( data ) {
          // Show the server result to client
      });
    }
 }


上面的代码有效,但是,由于post在JavaScript中是异步的,而不是使用async: false,如何使上面的代码按顺序运行?即以与数组jobs相同的顺序,并避免使用DOS服务器?

最佳答案

您可以在上一个帖子查询成功后运行下一个帖子查询。
将您的post调用转换为一个函数,在成功事件发生时,它将首先对数据执行您想要的任何操作,然后在下一项再次递归调用该函数。

就像是:

function sequentialQuerying(jobArr, currJob){

    if(currJob == jobs.length){
        return;
    }else{
        var smallerJobs = jobArr.slice(currJob, currJob+size);
        $.post("server.php", {jobs: smallerJobs})
            .done(function(data){
                //do something with the data if you want
                sequentialQuerying(jobArr, currJob += size);
            });
    }
}

09-11 12:03