Подтверждение электронной почты Codeigniter AJAX

После заполнения php-формы с использованием CI и класса электронной почты, я могу получать html-письма с включенными данными пользователей – отлично. Теперь, как и проверка CI, я хотел бы включить проверку на стороне клиента (AJAX) с хорошим эффектом fadeIn или fadeOut и все еще иметь проверку подлинности CI в случае, если javascript отключен.

Код, приведенный здесь, – это то, чего я до сих пор добился от разных источников, и я знаю, что это не полно, но даже не уверен, что я на правильном пути? До сих пор с тем, что у меня есть, форма все еще работает нормально, и я предполагаю, что она все еще запускает скрипт проверки подлинности CI, и никаких эффектов не происходит.

Я был бы признателен, если бы кто-нибудь мог направить меня туда, где я поступил неправильно, и, если возможно, какие последующие шаги предпринять? Вот код для моего вопроса:

ПОСМОТРЕТЬ

<div id="contact"> <?php //This is loaded in the view as it wont be used in the other pages $this->load->helper('form'); echo form_open('contact/send_email'); //success message if passed validation checks echo $success; // empty div for error messages (php) if(validation_errors() != ""){ echo '<h3>Please correct the following errors:</h3>'; echo '<div id="errors">'; echo validation_errors(); echo '</div>'; } echo form_label('Name: ', 'name'); $data = array ( 'name' => 'name', 'id' => 'name', 'value' => set_value('name') ); echo form_input($data); echo form_label('Email: ', 'email'); $data = array ( 'name' => 'email', 'id' => 'email', 'value' =>set_value('email') ); echo form_input($data); echo form_label('Message: ', 'message'); $data = array ( 'name' => 'message', 'id' => 'message', 'value' =>set_value('message') ); echo form_textarea($data); ?> <br /> <?php echo form_submit('submit', 'Send'); echo form_close(); ?> 

———– AJAX ——————-

 $(function() { $('form').click(function() { // get the form values var form_data = { name: $('name').val(), email: $('email').val(), message: $('message').val() }; // send the form data to the controller $.ajax({ url: "<?php echo site_url('contact/send_email'); ?>", type: "post", data: form_data, success: function(msg) { if(msg.validate) { $('form').prepend('<p>Message sent!</p>'); $('p').delay(3000).fadeOut(500); } else $('form').prepend('<div id="errors">Message Error</div>'); $('p').delay(3000).fadeOut(500); } }); // prevents from refreshing the page return false; }); }); </script> 

КОНТРОЛЛЕР

class Contact extends CI_Controller {

 function __construct() { parent::__construct(); } public function index() { $data['success'] = ''; $data['page_title'] = 'Contact'; $data['content'] = 'contact'; $this->load->view('template', $data); } public function send_email (){ $this->load->library('form_validation'); [SET RULES ARE LOCATED HERE] [ERROR DELIMITERS HERE] if ($this->form_validation->run() === FALSE) { $data['success'] = ''; $data['page_title'] = 'Contact'; $data['content'] = 'contact'; $this->load->view('template', $data); }else{ $data['success'] = 'The email has successfully been sent'; $data['name'] = $this->input->post('name'); $data['email'] = $this->input->post('email'); $data['message'] = $this->input->post('message'); $html_email = $this->load->view('html_email', $data, true); //load the email class $this->load->library('email'); $this->email->from(set_value('email'), set_value('name')); $this->email->to('-----EMAIL----'); $this->email->subject('Message from Website'); $this->email->message($html_email); $this->email->send(); $data['page_title'] = 'Contact'; $data['content'] = 'contact'; $this->load->view('template', $data); return null; } } 

}

Позвольте мне попытаться опубликовать свой первый ответ в этом сообществе:
1. Это файл jQuery, поэтому вы должны использовать метод .submit () для обработки формы submit

  $('form').submit(function() { 

но если вы хотите использовать клик, вы должны привязать его кнопкой «отправить»

  $('input[type="submit"]').click(function() { 

2. Вместо того, чтобы собирать все данные в массиве, вы можете использовать метод .serialize ()

  data: $('form').serialize(), 

3. В контроллере, почему вы загружаете представление? это вызов Ajax, поэтому общий метод возвращает ответ JSON зависит от вашего результата:

  if ($this->form_validation->run() === TRUE) { $data['success'] = 'The email has successfully been sent'; $data['name'] = $this->input->post('name'); $data['email'] = $this->input->post('email'); $data['message'] = $this->input->post('message'); $html_email = $this->load->view('html_email', $data, true); //load the email class $this->load->library('email'); $this->email->from(set_value('email'), set_value('name')); $this->email->to('-----EMAIL----'); $this->email->subject('Message from Website'); $this->email->message($html_email); $this->email->send(); $response->validate = true; echo json_encode($response); } 

В этой ситуации я удаляю FALSE, потому что вы уже проверяете свой результат на функцию обратного вызова:

 success: function(msg) { if(msg.validate) { $('form').prepend('<p>Message sent!</p>'); $('p').delay(3000).fadeOut(500); } else $('form').prepend('<div id="errors">Message Error</div>'); $('p').delay(3000).fadeOut(500); } }); 

Хотя это вопрос 2012 года, надейтесь на эту помощь людям, которые наткнулись на этот вопрос.