如何在处理时在ajax中附加基于php响应的消息?

时间:2016-10-03 08:21:30

标签: javascript php jquery ajax

我正在尝试向多人发送电子邮件,一旦电子邮件成功发送,我就会通过ajax响应添加消息。下面的代码工作正常

if(!empty($sendEmails)){
    $sendCount = 0;
    foreach($sendEmails  as $mail){
        $sent = $this->sendEmail('', $mail, $subject, $data);
        if($sent != 'Message Sent'){
        $response['send_error'][] = 'There is an error with ['.$mail.']';
        }else{
            $sendCount++;
        } 
    }
}
$response['success'] = 'Email has been sent successfully to '. $sendCount. ' person(s).'; 

的Ajax

$.ajax({
    type:'POST',
    url:'post.php',
    data:formData,
    dataType:"json",
    success:function(response){
        $(".sndMail").remove();
        if(response.success){
            $(".sendResponse").prepend('<div class="alert alert-success sndMail"> <strong>Alert! </strong> '+response.success+'</div>');
        }
        if(response.send_error){
            for(f=0; f<response.send_error.length; f++) {
                //alert(response.fileErr[f]);
                $(".sendResponse").prepend('<div class="alert alert-danger sndMail"> <strong>Alert! </strong> '+response.send_error[f]+'</div>');
            }
        }
        if(response.error){
            for(f=0; f<response.error.length; f++) {
                //alert(response.fileErr[f]);
                $(".sendResponse").prepend('<div class="alert alert-danger sndMail"> <strong>Alert! </strong> '+response.error[f]+'</div>');
            }
        }       
    }
});

但我想通过添加每个电子邮件发送响应来使用户查看更好。我想在处理时附加每个响应消息Response: Email is send to php_dev@gmai.com,一旦发送完所有电子邮件,我将显示已经有效的成功消息。

所以有人可以指导我这是否可以使用ajax?如果有人指导我,我想感谢。我搜索了它,但我没有找到解决方案。

2 个答案:

答案 0 :(得分:1)

单个ajax调用无法实现您想要的功能,但可以通过多次调用完成。

我们的想法是使用一个ajax调用来运行该进程,并使用第二个调用来定期轮询进度。

检查此问题:Multiple Response AJAX request

答案 1 :(得分:0)

是的,你可以。尝试这样的事情:

$response = array();
foreach($sendEmails  as $mail){
if(mail())    // success
{
   $response[$mail] = '';  // your message
}
else          // fail
{
    $response[$mail] = '';  // your message
}
}

echo json_encode($response);

AJAX:

success:function(response)
{
    var data = JSON.parse(response);
    // data contains the success or failure message for each email id. 
    // Show the status by wrapping the each email in <li> or <div> by using $.each loop
}