循环ajax请求

来源:互联网 发布:河南软件服务协会 编辑:程序博客网 时间:2024/05/22 04:53

1)问题:循环ajax请求,ajax是异步的,

//如何保证在第一条数据发送成功后再继续循环发送下一条数据呢?不用jqueryvar result = [1,2,3,4];for(var i=0;i<result.length;i++){    send(i);}function send(index){ $http({    method: "POST",    url: "url",    data: result[i],    timeout: 1000    })    .success(function(data) {         })    .error(function(data) {       })    .finally(function() {           });}



(2)问题:可以使用递归代替循环在请求成功的回调函数中递归调用请求函数,但是这也有个问题,递归后的结果无法return到外面的程序,因为递归函数仍是异步的,不影响顺序程序的执行。


var result = [1,2,3,4];send(0);//开启递归调用function send(index){ if(index > result.length)     return;//要做处理,估计也是这里调用别的函数,即ajax请求的回调函数 $http({    method: "POST",    url: "url",    data: postdata,    timeout: 1000    })    .success(function(data) {       index++;       send(index);    })    .error(function(data) {        index=result.length;        send(index);    })    .finally(function() {           });}

(3)如果上述递归异步调用无法满足需求,前提是可以使用jquery,可以采用同步ajax请求,完全顺序程序的逻辑。

            

var result = [1,2,3,4];for(var i=0;i<result.length;i++){    console.log("start",i);    send(i);    console.log("end",i)}function send(index){ $.ajax({    method: "POST",    url: "url",    data: result[i],    async:false,//同步    timeout: 1000    })    .success(function(data) {      console.log("sucess",i);    })    .error(function(data) {      console.log("error",i);    })    .finally(function() {           });}

打印结果:

               start 0

               success 0

               end 0

完全是顺序执行的逻辑





        




原创粉丝点击