超过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
}
});
有更好的想法达到我的目标吗?
提前致谢
答案 0 :(得分:1)
当XHR状态更改为Success
(成功)时,将触发调用的ajax的200
事件。这仅在后端处理完毕时才会发生。
您需要检查的是XHR readyState
属性。在处理请求期间将其设置为“3”。然后,您可以将PHP脚本中的更新发送到网页。
答案 1 :(得分:0)
我认为问题在于您应该继续告诉用户您的ajax回调中已成功发送电子邮件 - >在那里你知道如果(!错)那么你的请求是成功的 - >输出您的消息已成功发送。
显示每条消息"一次"是因为它们被放入堆栈并且被称为" ammediatly" - 您的ajax调用与此异步,并且在实际发送邮件时会触发回调。