【发布时间】:2018-07-07 04:21:00
【问题描述】:
我正在尝试从一个对象向收件人发送 SMS。
Jquery 每个循环是否在继续之前等待 ajax 成功?
我希望我的脚本在继续下一个收件人之前发送一条短信并将成功文本附加到 DOM。当每个循环完成后,我想要一条成功消息。
var i = 1;
var count = Object.keys( recipients ).length;
//LOOP threw recipients
$.each(recipients, function(nr, name){
//SEND SMS
$.ajax({
url: 'php/sms_send.php',
method: 'POST',
data: {nr: nr, name: name, text: text},
success: function(result){
//ECHO STATUS
$('<span>'+result+'</span><br>').appendTo('#recipients');
},
error: function(err){
//console.log(err);
}
}); //AJAX
//LAST ROW?
if(count === i){
//DISABLE BTN
$('#send_sms_btn').removeClass('disabled');
$('#send_sms_btn').text('Skicka');
//ECHO STATUS
$('<span class="text-success">Klar!</span><br>').appendTo('#recipients');
}
else{
i++;
}
}); //EACH
计数不正确,我想知道每个是在等待 ajax 还是只是在运行?
我怎样才能使这个工作流程更好?
【问题讨论】:
-
回答您的第一个(和重复的第二个)问题:不,循环不会等待 AJAX 调用返回响应。这就是 AJAX 中第一个 A 的含义:异步。
-
AJAX 不等待,它是异步的。要一次做一个,您需要使用延续并跟踪您在集合中的位置,而不是使用循环。
标签: javascript jquery ajax each