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

Append output after each loop on an ajax call back function

本文关键字:之后 循环 输出 ajax 回调 函数      更新时间:2023-09-26

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

我有一个按钮"发送",在点击事件中,我定义了一个函数,将$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)那么你的请求成功->输出你的消息已经成功发送。

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