2013-02-16 111 views
1

我正在創建一個基本的CRUD。所有的工作都很好,除了表格重新填充。這是我正在做的細節。Codeigniter當服務器驗證失敗時,在JQuery Colorbox中重新填充表單

我正在顯示所有員工的列表。有一些鏈接添加新。和每個員工一起編輯和刪除。現在在添加新的或編輯我填充jQuery的Colorbox和加載我的表單。這是命中我的控制器方法的鏈接。

<a 
    href="<?php echo site_url('employees/form/'.$employee['id']);?>" 
    id="popUpEditFormTrigger" 
    return="<?php echo site_url('employees/entries'); ?>" 
>Add New</a> 

正如你可以在這裏看到我打一個控制器方法加載的形式。這工作正常。在color box form.js中有一些代碼。

var dataString = $('#updateForm').serialize(); 
var url = $('#updateForm').attr('url'); 
$.ajax({ 
    type: "POST", 
    url: url, 
    data: dataString, 
    success: function() {     
     $.fn.colorbox.close();     
    } 
}); 
return false; 

它關閉ajax成功時的顏色框。返回false防止列表視圖走得更遠然後

return="<?php echo site_url('employees/entries'); ?>" 

運行並刷新表中的條目。

控制器

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

    $this->form_validation->set_rules('name',' Employee Name'.'trim|required'); 
    $this->form_validation->set_rules('salary',' Salary'.'trim|required'); 
    $this->form_validation->set_rules('description',' Description'.'trim|required'); 

    if($this->form_validation->run()){ 
     $data['name']   = $post['name']; 
     $data['salary']   = $post['salary']; 
     $data['description'] = $post['description']; 

     $result = $this->employeesModel->insertEmployee($data); 
    }else{ 
     $this->load->view('employee_form'); 
    } 
} 

問題:

的問題是,我想在重新填充顏色框形式,這樣我可以顯示用戶驗證錯誤。但是無論插入或驗證失敗,colorbox總是關閉。如果驗證失敗,我想要在colorbox中再次填充表單,並防止超鏈接屬性返回到site_url('employees/entries')。我怎樣才能做到這一點?我相信JQuery可以處理這個,但我不知道如何。建議需要。

+0

Ajax對你很重要,因爲我使用JS來調用url,它的工作很棒 – 2013-02-16 08:50:57

回答

0

好的,你在這裏做的概念是什麼導致了問題。如果沒有驗證錯誤,您希望關閉表單。但使用成功功能並不意味着這一點。 success function會告知ajax request是否已正確設置,而不管php的輸出是否正確。所以你需要做的是...

在PHP端:

if(ok){ 
$data['res'] = '1'; // which means that everything is ok 
} 
else{ 
$data['res'] = '0'; // which means that you had a problem with your validation. 
} 
// then pass the data in json format or any other format you need. 

上面的代碼只是一個樣品釐清思路。

那麼重要的是..在你的jQuery的一面:

success: function(data) {     
     if(data.res == '1') 
     { 
      $.fn.colorbox.close(); 
     } 
     else 
     { // display the errors 
     } 
    } 

所以這種成功函數告訴了ajax request已經成功地進行了。所以在它裏面你可以檢查驗證是否正確。

+0

那麼@mamdouhalramadan這正是我現在所想的,所以我將在colorbox.js中添加另一個函數,它將被調用而不是。關閉並關閉並調用返回。新功能將關閉彩盒並再次出現錯誤。謝謝你的想法 – 2013-02-16 12:40:42

0

嘿,我不知道阿賈克斯,但我用我的應用程序與JS的colorbox。我也只用於相同的目的。

包括你在內的colorbox.js文件將從你的視圖文件中調用這個Add New鏈接。

<a href="javascript:add_new('<?php echo $employee['id'] ?>')">Add new</a> 

當用戶單擊此鏈接時,將調用一個JS函數,您需要在該文件的末尾寫入該函數。

function show_channels(employee_id) { 

$.colorbox({href:"<?php echo ROOT_FOLDER ?>/controller_name/show_channels/" + employee_id,iframe:true,width:'515px',height:'374px'}); 
} 

現在colorbox會加載我在上面的javascript函數中指定的url。

現在您需要編寫用於處理數據的控制器功能。

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

$this->form_validation->set_rules('name',' Employee Name'.'trim|required'); 
$this->form_validation->set_rules('salary',' Salary'.'trim|required'); 
$this->form_validation->set_rules('description',' Description'.'trim|required'); 

if($this->form_validation->run()){ 
    $data['name']   = $post['name']; 
    $data['salary']   = $post['salary']; 
    $data['description'] = $post['description']; 

    $result = $this->employeesModel->insertEmployee($data); 
}else{ 
    $this->load->view('employee_form'); 
} 
}