2013-10-21 54 views
2

我想使用CI的表單驗證方法來驗證我的輸入數據。通過AJAX提交的表單,我使用serializeArray()將數據發佈到我的控制器,因此我不必通過一個數據發佈或打印某些each()函數。問題是表單驗證在$ _POST中查找數據。使用serialize()也沒有幫助。除了擴展表單驗證庫之外,還有解決方案嗎?使用JQuery序列化Code​​igniter表單驗證

這裏我的代碼: (控制器)

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

$this->load->library('form_validation'); 
$this->form_validation->set_rules('p_company_name', 'نام شرکت', 'required'); 
if ($this->form_validation->run() == FALSE) 
{ 
    echo "fail";die(); // if i use serialize() or serializeArray() 
} 
else 
{ 
    echo "success";die(); // if i use label:value for each form input 
} 

JS代碼:

$.ajax({ 
    type: "POST", 
    cache: false, 
    url: url, 
    data: {'form_data': form_data}, 
    dataType: "html", 
    success: function(res, textStatus, xhr) 
    { 
     // do something 
    }, 
    error: function(xhr, textStatus, thrownError) 
    { 
     //do something else 
    }, 
    complete: function() 
    { 
     // do some final thing 
    }, 
    async: true 
}); 

在此先感謝

回答

1

發表您的數據:

data: form.serialize(), 

和它會正常工作(形式是一個正常的jQuery參考您的頁面形式,不只是單詞「形式」)

+0

謝謝@jmadsen,但正如我告訴我測試序列化,它仍然給我錯誤。我認爲,因爲serialze()使窗體成爲查詢字符串,但沒有什麼可以被$ _POST理解。例如,如果我有2個表單元素,它會變成name1 = value1&name2 = value2,並將放入$ _POST ['form_data']。所以當codeigniter搜索$ _POST [「name1」]時,結果將是錯誤的。 – sobhan

+0

爲什麼它會在form_data中進行?它應該只是進入POST變量正常 在你的控制器,做的var_dump($ _ POST),看看發生了什麼事情 – jmadsen

+0

'form_data = $( 「myForm會」)。序列化()'。正如它在jquery網站'serialize'中陳述的那樣「將一組表單元素作爲一個字符串進行編碼以提交。」這意味着在調用這個函數並將其賦值給Ajax的data屬性中的某個變量之後,它只是包含一個「查詢字符串」。你可以在這裏看到這個例子[http://api.jquery.com/serialize/]。使用'var_dump'也顯示類似string(n)name1 = value1&name2 = value2&... – sobhan