2016-10-18 3 views
-1

フォームに空の入力を残したときにエラーが表示されない理由を理解できません。私は初めてフォームの検証を使用しています.AJAXでフォーム検証を送信する方法については本当に混乱しています。Formigniterがフォームの検証でajax呼び出しでvalidation_errors()を表示しない

私は012ignのパスにあるform_validation.phpというファイルをcodeigniterのWebページで説明されているように使用しています。私のアプリケーションのすべての入力の規則の検証を設定します。フォームヘルパーとform_validationライブラリをautoload.phpに設定しました。私はvalidation_errors()を介してエラーを印刷しようとするフォームビューで、何も起こりません。ここで

私のコードです:

FORM

<?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();?> 

CONTROLLER

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'), 

    ), 

答えて

0

あなたが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の中にメッセージを入れて、それらを表示。

+0

私は定義されていませんが、アラートでデータを印刷すると、すべてのメッセージが表示されます。=(ヘルプpls !!本当にnoobです。 jquery –

+0

jsonでエンコードされたレスポンスが得られるので、デコードする必要があります。 data = $ .parseJSON(data);また、検証が成功するとレスポンスをエンコードする必要があります。 – Alex

関連する問題