Codeigniter не отображает validation_errors() при вызове ajax при проверке формы

#php #ajax #codeigniter #validation

#php #ajax #codeigniter #проверка

Вопрос:

Я не понимаю, почему я не получаю ошибок, когда я оставил пустые входные данные в своей форме. Я использую проверку формы в первый раз, и я действительно смущен тем, как это способ отправки проверки формы с помощью AJAX.

Я использую файл, вызываемый form_validation.php по моему application/config пути, как описано на веб-странице codeigniter, чтобы установить правила проверки каждого ввода в моем приложении. Я уже включил помощник формы и form_validation библиотеку autoload.php . В представлении формы я пытаюсь напечатать ошибки validation_errors() , но ничего не происходит.

Вот мой код:

ФОРМА

 <?php echo form_open(null,array("class"=>"col s12","id"=>"enter_form"));?>

         <div class="row">
               <div class="col s4">
                  <span style="position:static;" class="badge yellow">Importante!!!</span>
                  <blockquote>
                    Si es primera vez que ingresas a votar, debes ingresar un correo y una contraseña, que te identifique como usuario.
                    Si ya te encuentras registrado, ingresa los mismos datos usados la primera vez que ingresaste, para realizar tu inicio de sesion.
                  </blockquote>

               </div>
                 <div class="col s8">
                   <?php

                    $errors= validation_errors('<li>','</li>');
                    if($errors != ""){
                          ?>
                              <div class="red lighten-2">
                                <ul>
                                  <?php echo $errors;?>
                                </ul>
                              </div>
                          <?php
                    }

                   ?>
                        <div class="row">
                           <div class="input-field col s6 offset-s3">
                               <input  id="enter_email" type="email" name="enter_email" class="validate">
                               <label  for="enter_email">Correo</label>
                           </div>
                        </div>
                        <div class="row">
                           <div class="input-field col s6 offset-s3">
                               <input  id="u" name="enter_password" type="password" class="validate">
                               <label  for="enter_password">Contraseña</label>
                           </div>
                        </div>

                       <input type="hidden" name="update_politic_hide" id="update_politic_hdn" value="">


                 </div>
           </div>
           <div class="modal-footer" style="position:fixed !important;">
                <div class="col s6 push-s5">
                   <button class="center-align btn waves-effect waves-light light-blue darken-4" type="submit" name="action" id="enter_submit">A votar!</button>
               </div>
           </div>

         <?php echo form_close();?>
  

КОНТРОЛЛЕР

 public function verification()
        {
          $this->load->model("votes");
            if ($this->input->is_ajax_request()) {

            if ($this->form_validation->run('enter_form')) {
                   //some code
            }
             //else should display validation_errors() on form view   

            $params["email"] = $this->input->post('enter_email');
            $params["password"] = $this->input->post('enter_password');

            $result = $this->votes->verification($params);

            if ($result==null) {
              $params["status"]= 0;
              $success=  $this->votes->user_record($params);
              return $success;
            }
            else {
              $params["status"]= 1;
              $success=  $this->votes->user_record($params);
              return $success;
            }

            }
        }
  

JAVASCRIPT

 $("#enter_form").submit(function(event) {

      event.preventDefault();

      var data = $(this).serialize();
      alert(data);

      $.post(baseurl "votos/verification",
        data,
       function(data) {

         if (data == 1) {
           alert("registrado");
         }
         else {
           alert("No estabas registrado, ahora si");
         }
      }

    );

    });
  

FORM_VALIDATION.PHP (правила ввода)

 'enter_form'
    => array(

        array('field' => 'enter_email','label' => 'Email','rules' => 'required|is_string|valid_email'),
        array('field' => 'enter_password','label' => 'Password','rules' => 'required|is_string'),

    ),
  

Ответ №1:

Это потому, что вы отправляете форму через ajax-запрос. Этот код не запускается после отправки формы.

  $errors= validation_errors('<li>','</li>');
                if($errors != ""){
                      ?>
                          <div class="red lighten-2">
                            <ul>
                              <?php echo $errors;?>
                            </ul>
                          </div>
                      <?php
                }
  

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

     if ($this->form_validation->run('enter_form') === true) {
        //some code
    }else{
        $errors = validation_errors();
        echo json_encode(array("success"=>false, "message"=>$errors));
        die();
    }
  

Затем в обратном вызове ajax вы помещаете сообщение в div и отображаете их.

Комментарии:

1. Когда я пытаюсь выполнить data.message в функции ajax… Я получаю undefined, но когда я печатаю данные в оповещении … он показывает все сообщения… =( помогите, пожалуйста!! я действительно новичок в jquery

2. Вы получаете ответ, закодированный в формате json, поэтому вы должны декодировать его data = $.parseJSON(data); Также вам нужно закодировать ответ на случай, если он пройдет проверку, чтобы вы всегда получали действительный ответ json от сервера.