2013-03-12 159 views
0

我有一個ajax表單設置,我已經將字段傳遞給我的Codeigniter控制器進行處理。我的AJAX看起來是這樣的:Ajax發佈Codeigniter驗證表單數據

... 
dataType : 'json', 
data : { 
    'name' : $('#name_recipe').val(), 
    'email' : $('#email').val(), 
    'town' : $('#town').val() 
}, success : function (data, status){ 
    if(data.status != 'error') { 
     $('#name').val(''); 
     $('#email').val(''); 
     $('#town').val(''); 
    } 
    $('#response').html('<p>'+data.msg+'</p>'); 
} 

,並在我的控制器我單獨處理它們,例如:

if(empty($_POST['name'])) { 
    $status = "error"; 
    $msg = "The <b>Name</b> field is required."; 
} else { 
    $name = $_POST['name']; 
} 

echo json_encode(array('status' => $status, 'msg' => $msg)); 

然而,這種處理錯誤消息一個接一個,什麼我真的想是將它們推入陣列,以便我可以一次顯示它們。我會如何去做這件事?提前致謝。

回答

1

首先,您應該使用codeigniters input對象訪問您的表單變量。

我創建了一個數組來存儲消息。如果遇到錯誤,則會將消息推送到陣列上。一旦所有檢查完成,如果$msg數組大小大於零,我們知道發生了錯誤。

PHP

$msg = array(); 

$name = $this->input->post('name'); 
$email = $this->input->post('email'); 
$town = $this->input->post('town'); 

if (!$name) { 
    $msg[] = '<p>The <b>Name</b> field is required'; 
} 
if (!email || !filter_var($email, FILTER_VALIDATE_EMAIL)) { 
    $msg[] = '<p>The <b>Email</b> field is not valid'; 
} 
if (!$town) { 
    $msg[] = '<p>The <b>Town</b> field is required'; 
} 

$status = count($msg) ? 'error' : 'success'; 

echo json_encode(array('status' => $status, 'msg' => $msg)); 

Javascript語言,成功回調

在客戶端,我們創建的每一個錯誤的無序列表,並追加,爲#response

var list = $('<ul />').appendTo($('#response').empty()); 
for (var e in data.msg) { 
    $('<li />', {text: data.msg[e]}).appendTo(list); 
} 
+0

絕對精彩!你不知道你救了我的頭痛:)非常感謝! – 2013-03-12 16:23:58

0

您的控制器:

# validate (recommend Ci validation) 
$msg = ''; 
if (!$name) $msg .= 'The name field is required<br />'; 
if (!email || !filter_var($email, FILTER_VALIDATE_EMAIL)) $msg .= 'The Email field is not valid <br />'; 
if (!$town) $msg .= 'The Town field is required<br />'; 

if($msg != '') exit($msg); 

# process 
$this->my_model->process(); 

exit('success'); 

JS:

... 
success : function (data) { 
    if(data == 'success') { 
     $('#name').val(''); 
     $('#email').val(''); 
     $('#town').val(''); 
    } else { 
     $('#response').html(data); 
    } 
}