Javascript 在ajax回调函数的每个循环后追加输出

Javascript 在ajax回调函数的每个循环后追加输出,javascript,php,ajax,asynchronous,Javascript,Php,Ajax,Asynchronous,为了找到一种显示ajax回调函数所呈现结果的最佳方式,我花了2个多小时的时间,让我解释一下我到底想做什么来更好地理解 我有一个“发送”按钮,在单击事件时,我定义了一个函数,将$category_id发送到另一个页面,然后从数据库中获取所有收件人,并为每个收件人发送电子邮件。现在,整个过程运行良好,但每次循环后: (foreach ($recipients as $recipient)) {send_mail(); echo "email sent successfully to ....";}

为了找到一种显示ajax回调函数所呈现结果的最佳方式,我花了2个多小时的时间,让我解释一下我到底想做什么来更好地理解

我有一个“发送”按钮,在单击事件时,我定义了一个函数,将$category_id发送到另一个页面,然后从数据库中获取所有收件人,并为每个收件人发送电子邮件。现在,整个过程运行良好,但每次循环后:

(foreach ($recipients as $recipient))
{send_mail();
echo "email sent successfully to ....";} 
我将返回一份回音声明,告知该电子邮件已正确发送给该收件人。 Javascript函数被定义为将这些echo结果附加到div中,但它不是在渲染后显示每条语句,而是将它们全部收集起来并立即显示

$.ajax({
                async: true,
                url: 'send_emails.php?category='+category,
                success: function(r){
                    $('#status').append(r); //this happens all at once
                                    }
                }); 
有没有更好的办法来实现我的目标


提前感谢

当XHR状态更改为
200
(成功)时,将触发调用ajax的
Success
事件。这仅在后端完成处理时发生

您需要检查的是XHR
readyState
属性。在处理请求期间设置为“3”。然后,您可以将PHP脚本中的更新发送到该网页


我认为问题在于,您应该继续告诉用户,电子邮件已在ajax回调中成功发送->您知道(!err)是否成功,然后您的请求已成功->输出消息已成功发送


“一次”显示每条消息是因为它们被放入堆栈并被称为“ammediatly”-您的ajax调用与此异步,并且在实际发送邮件时会触发回调。

我不明白您的目标是什么,是否要逐个发送电子邮件?或者您想在html中以不同元素显示消息吗?不,我想在每次发送电子邮件时在html页面中显示消息(电子邮件已成功发送…)。这正是我想做的!非常感谢,你救了我一天我想这不是我真正想要的,脚本每1秒或按照你的定义显示一次消息,但我正在寻找一种在每次循环后显示消息的方法!!