我设置了一个ajax表单,我将字段传递给我的Codeigniter控制器进行处理。我的ajax看起来像这样:
...
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));
然而,这会逐个处理错误消息,我真正想要的是将它们推送到一个数组中,这样我就可以一次性显示它们。我该怎么做呢?提前谢谢。
答案 0 :(得分:1)
首先,您应该使用codeigniters input
object访问表单变量。
我创建了一个存储消息的数组。如果遇到错误,则会将消息推送到阵列上。完成所有检查后,如果$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);
}
答案 1 :(得分: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);
}
}