在循环并进行下一次调用之前,我将如何等待上一次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';
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>
答案 0 :(得分:3)
您可以添加计数器(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();
});
});
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您只是想等待ajax调用完成,为什么不能只使它成为async : false
? (虽然我不推荐)
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/>");
}
}
});
这将使循环等到方法完成执行