0

我创建了一个电子邮件实用程序,它显示了从中接收电子邮件的电子邮件 ID 的主题行和日期。每个电子邮件 ID 旁边都有一个复选框。无论单击哪个复选框,电子邮件都会发送到该电子邮件 ID。我的问题是我想在同一页面上显示“消息发送成功”或错误消息而无需重新加载。

我认为,使用 ajax 是可能的,但我不知道如何。这是我的看法:

<?php echo form_open_multipart('accessmail/sendmail'); ?>
    <div>   
            //here I display my emails
            <div>
        <div class="table_wrap1">
                <div>Subject:</div>
                <div><input type="text" required="required" id="subject" name="subject"></div>
            </div>  
            <div class="table_wrap1">       
                <div>Email:</div>
                <div><input type="email" id="replyto" name="replyto"></div>
            </div>
            <div id="txteditor">
                <textarea name="textarea">  
                </textarea>
                <button name="submit" value="process" type="submit">Send</button>
            </div>

        <?php } ?> 

    </div>
</form>

我的控制器名称是“accessmail”,方法名称是“发送邮件”:

public function sendmail()
{
    $this->load->library('email');
    $count=$this->input->post('mailcount'); 
    $subject = $this->input->post('subject');
    $msg = $this->input->post('textarea');
    $replyto = $this->input->post('replyto');
    //variable for checking whether any email id is selected or not
    $status=0;
    //for sending email to checked email id's
    for($i=0;$i<$count;$i++)
    {
        // check whether the checkbox for a particular email id is checked or not
        if(!$this->input->post('emailid'.$i))
        {   

            continue;
        }
        else    
        {   
            //set the values for this email and send it
            $this->email->from('abc@abc.com', 'abc');
            $this->email->subject($subject);
            $this->email->message($msg);
            $idtosend = $this->input->post('emailid'.$i);
            $this->email->to($idtosend);
            if ($this->email->send())
            {
                $status++;
            }
        }
    }
    //for sending email to email id provide in textbox
    if(!empty($replyto))
    {
        $this->email->from('abc@abc.com', 'Abc');
        $this->email->subject($subject);
        $this->email->message($msg);
        $this->email->to($replyto);
        if ($this->email->send())
        {
            $status++;
        }
    }
    if($status>0)
    {
          //this message should be displayed on the same page along with other contents of the page
        echo "Your message has been sent";
    }
    if($status==0)
    {
        //this message should be displayed on the same page along with other contents of the page
        echo "Select any Email-id first";
    }

}   

我的问题是成功消息应该显示在保留页面内容的同一视图上。提前致谢。

4

1 回答 1

0

是的,这是典型的 Ajax 事情。但不幸的是,这有点太大而无法为您提供答案(或者我太懒了,但您会从中受益最大,通过自己弄清楚这一点)。我的建议是,你学习 jQuery 和 Ajax(如果你还不知道的话)。

对于您的问题,您特别希望通过 Ajax 将邮件发送到您的 PHP-Function sendmail()。这个函数要么返回一个成功消息,要么返回一个错误消息(周围有 json_encode(),这就是我的做法)。Ajax 函数然后显示该消息。

这既没有经过测试,也不应该是最终的解决方案......只是一个提示:

PHP函数:

<?php
function sendmail()
{
  $mails = $_POST['mails'];
  $countEmails = count($mails);
  $success = 0;
  foreach ($mails as $mail) {
    // Check and send mails here
    if ($this->email->send()) {
      $success++;
    }
  }
  if ($success < $countEmails) {
    echo json_encode('One or more E-Mails were not sent');
    return;
  }
  echo json_encode('E-Mails successfully sent');
}

Ajax 函数(不要忘记包含 jquery):

$('#id_of_your_send_mails_button').bind('click', function(evt) {
  evt.preventDefault();
  $.ajax({
    type: 'post',
    url: 'path/to/sendmail',
    dataType: 'json',
    data: {
      mails: $('#id_of_your_form').serialize();
    },
    success: function (data) {
      $('#id_of_your_status_div').html(data);
    }
  });
});

同样,这只是伪代码的东西,让你明白,但你必须自己学习。

希望那些对你有帮助。

编辑 您也可以尝试:

$('#id_of_your_send_mails_button').bind('click', function(evt) {
  evt.preventDefault();
  $.ajax({
    type: 'post',
    url: 'path/to/sendmail',
    dataType: 'json',
    data: {
      name: $('#id_of_your_name_field').val(),
      email: $('#id_of_your_name_field').val() // and so forth
    },
    success: function (data) {
      $('#id_of_your_status_div').html(data);
    }
  });
});
于 2013-08-06T13:19:36.533 回答