Javascript 在for循环中等待上一个AJAX调用
在循环并执行下一个调用之前,如何等待上一个ajax调用完成?此时,代码一路循环,并同时执行所有ajax请求Javascript 在for循环中等待上一个AJAX调用,javascript,jquery,ajax,Javascript,Jquery,Ajax,在循环并执行下一个调用之前,如何等待上一个ajax调用完成?此时,代码一路循环,并同时执行所有ajax请求 <script> var busy; function check(mailpass, proxy){ var post_data = {}; var post_json = ""; post_data['mailpass'] = mailpass; post_data['proxy'] = '108.36.248.67:17786';
<script>
var busy;
function check(mailpass, proxy){
var post_data = {};
var post_json = "";
post_data['mailpass'] = mailpass;
post_data['proxy'] = '108.36.248.67:17786';
post_json = JSON.stringify(post_data);
jQuery.ajax({
url: '/postdata' ,
type: "POST",
data: {params: post_json},
success: function(data){
var obj = JSON.parse(data);
if(obj.error == 0){
//
$("#acc-live").append(obj.msg + "<br/>");
} else if(obj.error == 1){
//
$("#socks-die").append(obj.msg+ "<br/>");
} else if(obj.error == 2){
//
$("#acc-die").append(obj.msg+ "<br/>");
}
}
});
}
$(document).ready(function(){
$("#submit").click(function(){
var lines = $("#lines").val().split('\n');
for(var i = 0;i < lines.length;i++){
check(lines[i], '123');
}
});
});
</script>
var忙;
功能检查(邮件传递、代理){
var post_data={};
var post_json=“”;
post_数据['mailpass']=mailpass;
post_数据['proxy']='108.36.248.67:17786';
post_json=json.stringify(post_数据);
jQuery.ajax({
url:“/postdata”,
类型:“POST”,
数据:{params:post_json},
成功:功能(数据){
var obj=JSON.parse(数据);
如果(obj.error==0){
//
$(“#acc live”)。追加(obj.msg+”
);
}else if(obj.error==1){
//
$(“#socks die”).append(obj.msg+”
);
}else if(obj.error==2){
//
$(“#acc die”).append(obj.msg+”
);
}
}
});
}
$(文档).ready(函数(){
$(“#提交”)。单击(函数(){
变量行=$(“#行”).val().split('\n');
对于(变量i=0;i
您应该查看jQuery.when():
这将等待异步调用完成后继续您可以添加计数器(currentIndex)并稍微重新组织代码
var busy;
var lines;
var currentIndex = 0;
function checkNext(){
if( currentIndex >= lines.length ){
console.log('all done');
return;
}
var mailpass = lines[currentIndex];
var proxy = '123';
var post_data = {};
var post_json = "";
post_data['mailpass'] = mailpass;
post_data['proxy'] = '108.36.248.67:17786';
post_json = JSON.stringify(post_data);
jQuery.ajax({
url: '/postdata' ,
type: "POST",
data: {params: post_json},
success: function(data){
var obj = JSON.parse(data);
if(obj.error == 0){
//
$("#acc-live").append(obj.msg + "<br/>");
} else if(obj.error == 1){
//
$("#socks-die").append(obj.msg+ "<br/>");
} else if(obj.error == 2){
//
$("#acc-die").append(obj.msg+ "<br/>");
}
currentIndex++; //Increase the counter
checkNext();
}
});
}
$(document).ready(function(){
$("#submit").click(function(){
lines = $("#lines").val().split('\n');
checkNext();
});
});
var忙;
var线;
var currentIndex=0;
函数checkNext(){
如果(currentIndex>=lines.length){
console.log(“全部完成”);
返回;
}
var mailpass=行[currentIndex];
var proxy='123';
var post_data={};
var post_json=“”;
post_数据['mailpass']=mailpass;
post_数据['proxy']='108.36.248.67:17786';
post_json=json.stringify(post_数据);
jQuery.ajax({
url:“/postdata”,
类型:“POST”,
数据:{params:post_json},
成功:功能(数据){
var obj=JSON.parse(数据);
如果(obj.error==0){
//
$(“#acc live”)。追加(obj.msg+”
);
}else if(obj.error==1){
//
$(“#socks die”).append(obj.msg+”
);
}else if(obj.error==2){
//
$(“#acc die”).append(obj.msg+”
);
}
currentIndex++;//增加计数器
checkNext();
}
});
}
$(文档).ready(函数(){
$(“#提交”)。单击(函数(){
行=$(“#行”).val().split('\n');
checkNext();
});
});
如果您只想等待ajax调用完成,为什么不能将其设置为异步:false?(尽管我不推荐)
jQuery.ajax({
url:“/postdata”,
类型:“POST”,
async:false,//此处
数据:{params:post_json},
成功:功能(数据){
var obj=JSON.parse(数据);
如果(obj.error==0){
//
$(“#acc live”)。追加(obj.msg+”
);
}else if(obj.error==1){
//
$(“#socks die”).append(obj.msg+”
);
}else if(obj.error==2){
//
$(“#acc die”).append(obj.msg+”
);
}
}
});
这将使循环等待直到方法完成它的执行
jQuery.ajax({
url: '/postdata' ,
type: "POST",
async : false, // here
data: {params: post_json},
success: function(data){
var obj = JSON.parse(data);
if(obj.error == 0){
//
$("#acc-live").append(obj.msg + "<br/>");
} else if(obj.error == 1){
//
$("#socks-die").append(obj.msg+ "<br/>");
} else if(obj.error == 2){
//
$("#acc-die").append(obj.msg+ "<br/>");
}
}
});