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

时间:2014-11-11 10:10:52

标签: javascript php ajax asynchronous

超过2小时试图找到一种显示ajax回调函数所呈现结果的最佳方式,让我解释一下我想要做些什么来更好地理解......

我有一个按钮"发送" ,在点击事件中,我定义了一个函数,它将$ category_id发送到另一个页面,然后我从数据库中获取所有收件人并为每个邮件发送。现在整个过程工作正常,但在每次循环之后:

(foreach ($recipients as $recipient))
{send_mail();
echo "email sent successfully to ....";} 

我正在返回一条echo语句,告知该电子邮件已正确发送给该收件人。 Javascript函数被定义为将这些echo结果附加到div中,但不是在渲染后显示每个语句,而是将它们全部收集并立即显示它们。

$.ajax({
                async: true,
                url: 'send_emails.php?category='+category,
                success: function(r){
                    $('#status').append(r); //this happens all at once
                                    }
                }); 

有更好的想法达到我的目标吗?

提前致谢

2 个答案:

答案 0 :(得分:1)

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

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

Here is a good blog that explains how to do it

答案 1 :(得分:0)

我认为问题在于您应该继续告诉用户您的ajax回调中已成功发送电子邮件 - >在那里你知道如果(!错)那么你的请求是成功的 - >输出您的消息已成功发送。

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