如何在同一页面上循环回显

时间:2016-02-19 11:59:22

标签: javascript php ajax email

我正在编写一个程序,通过ajax向我们的注册用户发送批量电子邮件。

我希望在完成后回显每个循环响应并进入下一个条件。

例如: -

我在数据库中列出了100封电子邮件。当我向计划提交请求时,它将开始发送电子邮件。

PROG。的工作方式如下:

<?php
       foreach($emails as $email){
          $status = $this->sendMail($email);
          if($status == true)
          {
            echo "Mail Sent";
          }else{
            echo "Not Sent";
          }
       }
?>

现在我想在每个循环中反复打印“Mail Sent”/“Not Sent”。

输出: -

发送邮件

发送邮件

发送邮件

未发送

发送邮件

发送..

修改

我的PHP代码是: -

<?php


    public function send_message() {
        $sendTo = $this->input->post('send_to');
        $template = $this->input->post('template');
        $subject = $this->input->post('subject');
        switch ($sendTo) {
            case 1:
                $users = $this->getAllEmails();
                break;
            case 2:
                $users = $this->getRegisteredUsersEmails();
                break;
            case 3:
                $users = $this->getTemproryUsersEmails();
                break;
            case 4:
                $users = $this->getSubscribersEmails();
                break;
        }
        $status = $this->sendMail($users, $template, $subject);
        echo "Mail Sent";
    }
 private function sendMail($users, $template, $subject) {
        $this->load->library('parser');
        $status = array();
        $i = 0;
        foreach ($users as $user) {
            $message = $this->parser->parse('email_templates/' . $template, array('email' => $user->email, 'name' => ($user->name != '') ? "Hi " . $user->name : "Hello"), TRUE);
            $response = $this->mail->send(config_item('sender_mail'), config_item('sender_name'), $user->email, $subject, $message);
            $status[$i]['email'] = $user->email;
            $status[$i]['status'] = ($response == 1) ? 1 : 0;
            $i++;
        }
        return $status;
    }
?>

我的Ajax代码: -

<script type="text/javascript">
$("#send_mail").submit(function(){
    $.ajax{
    url:"<?php echo base_url('promotion/send_message'); ?>",
    type:"post",
    data:$(this).serialize(),
    success:function(data){
       $("#status").html(data);
    }
  }
});
</script>

2 个答案:

答案 0 :(得分:2)

你必须使用javascript / jquery而不是PHP进行循环。要在服务器端没有溢出,您应该只使用递归调用函数成功。这样它就会同步。

<强>的jQuery

var emails = [
'lorem@stackoverflow.com', 
'ipsum@stackoverflow.com', 
'foo@stackoverflow.com'
];

index = 0;
var sendMail = function(email){
  $.ajax({
    url:"sendMail.php",
    type: "POST"
    data: { emailId: email}  
    success:function(response) {
        index++;
        document.write(response); 
        if(emails[index] != undefined){
            sendMail(emails[index]);
        }
     }
  });
}

sendMail(emails[index]);

<强> PHP

$status = $this->sendMail($$_POST['email']);
$msg = $status ? "Mail Sent" : "Not Sent";
echo $msg;

答案 1 :(得分:1)

I want to print the response when each time "$this->mail->send" function is called in "sendMail()"

正如上面的代码,$status应该像json对象数组一样返回ajax函数。所以我试试这个......

private function sendMail($users, $template, $subject) {
    $this->load->library('parser');
    $status = array();
    $i = 0;
    foreach ($users as $user) {
        $message = $this->parser->parse('email_templates/' . $template, array('email' => $user->email, 'name' => ($user->name != '') ? "Hi " . $user->name : "Hello"), TRUE);
        $response = $this->mail->send(config_item('sender_mail'), config_item('sender_name'), $user->email, $subject, $message);
        $status[$i]['email'] = $user->email;
        $status[$i]['status'] = ($response == 1) ? 1 : 0;
        $i++;
    }
    echo json_encode($status);
}

Ajax代码

<script type="text/javascript">
$("#send_mail").submit(function(){
$.ajax{
url:"<?php echo base_url('promotion/send_message'); ?>",
type:"post",
dataType : "json",
data:$(this).serialize(),
success:function(data){
    $.each(data,function(i,v){
       $("#status").append(v.status);
     }
}
}
});
</script>