(1)问题:循环ajax请求,ajax是异步的,
//如何保证在第一条数据发送成功后再继续循环发送下一条数据呢?不用jquery var 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
完全是顺序执行的逻辑