2016-05-12 91 views
2

如果我不想刷新頁面,我該如何在codeigniter中進行表單驗證? 基本上我這樣做:在codeigniter中使用jquery ajax進行表單驗證

$config = array(
      array(
        'field' => 'c_name', 
        'label' => 'Name', 
        'rules' => 'trim|required' 
      ), 
      array(
        'field' => 'c_job', 
        'label' => 'Job', 
        'rules' => 'trim|required', 
        ) 
    ); 
    $this->form_validation->set_rules($config); 
    if($this->form_validation->run() == true) 
      { 
       $this->load->model('model'); 
       //..... 
      } 
    else{ 
      $this->load->view('view'); 
     } 

但是,如果我用Ajax發送數據和網頁不刷新,我該怎麼辦表單驗證?

編輯:

Thanks @ Amra Kojon。這是好作品,但新的問題是這樣的:

if ($this->form_validation->run() == FALSE) { 
       echo validation_errors(); 
       } 
       else { 
         //echo 'hi'; 


         $value = $this->input->post('value'); 

         $values = array(
           'c_name' => $value['c_name'], 
           'c_job'=> $value['c_job'], 
           'c_address'=> $value['c_address'], 
           'c_phone'=> $value['c_phone'], 
           'c_mail'=> $value['c_mail'], 
           'c_state'=> $value['c_state'], 
           'c_intrest'=> $value['c_intrest'], 
           'c_added_info'=> $value['c_added_info'] 
         ); 


         $add = $this->customers_model->add_customer($values); 
         echo $add; 
       } 

如果我剛纔說的回聲在其他部分「東西」,它的工作原理,如果確認是好的,它呼應喜,但如果我寫數據庫主題(其中值數組有數據,而不是Ajax方式,它插入日期),它不起作用,其他部分不工作!

+0

如果您使用jQuery使用jQuery驗證。 –

+0

在瀏覽器端簡單使用Jquery驗證,並在codeigniter中使用服務器端驗證 –

回答

3

如果你給你的JS-的jQuery Ajax代碼會更有效地理解您的問題。不要擔心!嘗試我的下列指令...

1)獲取得到形式值並傳遞,以形成如圖

<script type="text/javascript"> 
    $(document).ready(function(){ 
    var dataString = $("#FormId").serialize(); 
    var url="ControllerName/MethodName" 
     $.ajax({ 
     type:"POST", 
     url:"<?php echo base_url() ?>"+url, 
     data:dataString, 
     success:function (data) { 
      alert(data); 
     } 
     });  
    }) 
</script> 

控制器:

  • 裝載庫中構建form_validation as ...

    $ this-> load-> library('form_validation');

    $ this-> load-> helper('form');

  • 現在寫你的控制器......

    function MethodName { 
    $this->form_validation->set_error_delimiters('', ''); 
    $this->form_validation->set_rules('fname','First Name', 'required'); 
    $this->form_validation->set_rules('lname','Last Name', 'required'); 
    $this->form_validation->set_rules('email','Email Address','required|valid_email|is_unique[sec_users.email]'); 
    if ($this->form_validation->run() == FALSE) { 
        echo validation_errors(); 
    } 
    else { 
        // To who are you wanting with input value such to insert as 
        $data['frist_name']=$this->input->post('fname'); 
        $data['last_name']=$this->input->post('lname'); 
        $data['user_name']=$this->input->post('email'); 
        // Then pass $data to Modal to insert bla bla!! 
    } 
    

    },因爲它是在我的應用程序工作

  • 希望將工作。

    謝謝!

    +0

    Thanks @ Amra Kojon :)我更新了問題。請看。 – meph

    +0

    @ user1767712請你給你的HTML和型號代碼,這將幫助我給出確切的解決方案。謝謝! –

    0

    如果您知道使用ajax傳遞數據,那麼工作流程如下。

    1)通過ajax發送表單數據到您的控制器。

    2)現在進行表單驗證。

    3)如果成功則「回聲」值1

    4)如果失敗,回波值0

    因此,使用在回聲的值,就可以判斷所述驗證是否失敗。我可以給你舉個例子,如果你需要

    樣品Ajax代碼

    $('#form').on('submit', function(e){ 
        e.preventDefault(); 
        var data = $(this).serialize(); 
        $.ajax({ 
         url: 'your url', 
         type: 'POST', 
         data: data, 
         success: function(data){ 
          if(data == 1){ 
           $('#form')[0].reset(); 
           alret('success'); 
          } 
          else if(data == 0){ 
           alret('failed'); 
          } 
         }, 
         error: function(){ 
          alert('error'); 
         } 
        }); 
    }); 
    
    -1

    如果使用ajax,...你不能使用form_validation庫 所以你可以驗證客戶端使用jquery ...並在服務器端應使用if語句來檢查提交的數據

    +0

    不,不是這樣的。你可以使用form_validation庫來使用或不使用ajax。 –