2
我想使用CI的表單驗證方法來驗證我的輸入數據。通過AJAX提交的表單,我使用serializeArray()
將數據發佈到我的控制器,因此我不必通過一個數據發佈或打印某些each()
函數。問題是表單驗證在$ _POST中查找數據。使用serialize()
也沒有幫助。除了擴展表單驗證庫之外,還有解決方案嗎?使用JQuery序列化Codeigniter表單驗證
這裏我的代碼: (控制器)
$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
});
在此先感謝
謝謝@jmadsen,但正如我告訴我測試序列化,它仍然給我錯誤。我認爲,因爲serialze()使窗體成爲查詢字符串,但沒有什麼可以被$ _POST理解。例如,如果我有2個表單元素,它會變成name1 = value1&name2 = value2,並將放入$ _POST ['form_data']。所以當codeigniter搜索$ _POST [「name1」]時,結果將是錯誤的。 – sobhan
爲什麼它會在form_data中進行?它應該只是進入POST變量正常 在你的控制器,做的var_dump($ _ POST),看看發生了什麼事情 – jmadsen
'form_data = $( 「myForm會」)。序列化()'。正如它在jquery網站'serialize'中陳述的那樣「將一組表單元素作爲一個字符串進行編碼以提交。」這意味着在調用這個函數並將其賦值給Ajax的data屬性中的某個變量之後,它只是包含一個「查詢字符串」。你可以在這裏看到這個例子[http://api.jquery.com/serialize/]。使用'var_dump'也顯示類似string(n)name1 = value1&name2 = value2&... – sobhan