【问题标题】:Append output after each loop on an ajax call back function在ajax回调函数的每个循环之后附加输出
【发布时间】:2014-11-11 10:10:51
【问题描述】:

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

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

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

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

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

有没有更好的想法来实现我的目标?

提前致谢

【问题讨论】:

  • 我不明白您的目标是什么,您要一封一封地发送电子邮件吗?或者你想在 html 的不同元素中显示消息?
  • 不,我想在每次发送电子邮件时在 html 页面中显示消息(电子邮件发送成功...)。

标签: javascript php ajax asynchronous


【解决方案1】:

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

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

Here is a good blog that explains how to do it

【讨论】:

  • 这正是我想做的!非常感谢,你拯救了我的一天
  • 我认为这不是我真正想要的,该脚本每 1 秒或按照您的定义显示消息,但我正在寻找一种在每次循环后显示消息的方法!!跨度>
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多