2017-09-30 64 views
2

我想在html彈出窗體的ci中使用表單驗證庫,並在客戶端請求時向客戶端顯示錯誤,如果驗證錯誤==數據庫中的True更新行以及驗證錯誤= False向客戶機顯示字段錯誤使用ajax和codeigniter進行表單驗證

我的HTML代碼,彈出:

<div class="row"> 
    <div class="form-group col-lg-6"> 
     <label class="col-sm-4 control-label">tarh</label> 
     <div class="col-sm-8 control-label"> 
      <input type="text" name="modal_tarh" id="modal_tarh" class="form-control"> 
     </div> 
    </div> 

    <div class="form-group col-lg-6"> 
     <label class="col-sm-3 control-label">agreement number</label> 
     <div class="col-sm-6 control-label"> 
      <input type="text" name="modal_agreement_number" id="modal_agreement_number" class="form-control"> 
     </div> 
    </div> 
</div> 
<button type="button" class="btn btn-info" id="edit_agreement">edit</button> 

Ajax代碼:

$(document).ready(function() { 

    $("#edit_agreement").click(function() { 
     var String_Url = "address"; 
     var String_Method = "POST"; 
     data_send = { 

      'f1':$("#modal_tarh").val(), 
      'f2':$("#modal_agreement_number").val() 
     }; 
     $.ajax({ 
      url:String_Url, 
      type:String_Method, 
      data:data_send, 
      contentType: 'application/json', 
      success:function(callbackData, status, xhr){ 
       alert(callbackData) 
       console.log(callbackData) 

      }, 
      error:function(xhr, status, err){ 

       alert(xhr.status); 
      } 
     }); 
    }); 

}); 

笨控制器

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Portal extends My_controller 
{ 

public function editAgreement() 
    { 
     $this->load->library('form_validation'); 

     $config = array(
      array(
       'field' => 'modal_tarh', 
       'label' => 'tarh', 
       'rules' => 'required', 
       'errors' => array 
       (
        'required' => 'pls fill %s .', 
       ) 
      ), 
      array(
       'field' => 'modal_agreement_number', 
       'label' => 'agreement number', 
       'rules' => 'required', 
       'errors' => array 
       (
        'required' => 'pls fill %s .', 
       ) 
      ) 
     ); 

     $this->form_validation->set_rules($config); 

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

callbackData在AJAX包含HTTP狀態代碼200,並沒有數據

+2

你不能這樣做從服務器重定向上一個Ajax調用。 [請參閱此答案以獲得解決方法。](https://stackoverflow.com/a/19762782/3585500) – ourmandave

回答

0

無法通過Ajax調用做這樣的重定向。

變化

redirect('admin/portal/'); 

echo 'Success'; 

或者,如果你真的想重定向成功Ajax請求然後做

echo base_url('admin/portal/'); 

,並在您的Ajax請求:

success:function(callbackData, status, xhr){ 
    window.location = callbackData; 
}, 

你也可以看看讓你的控制器同時處理Ajax和非Ajax請求,像這樣:

if ($this->input->is_ajax_request()) { 
    echo base_url('admin/portal/'); 
} else { 
    redirect('admin/portal/'); 
}