我是codeigniter的新手,很抱歉这个简单的问题。
我想为我的ajax进程运行formvalidator。如何将valdiation错误作为JSON返回?有更好的方法吗?
由于
答案 0 :(得分:0)
你还没有说明你在做什么。我将假设你有一个表格,你想使用ajax保存数据,这样你就没有任何那些讨厌的保存/提交按钮。另外,我猜你有一些.change()处理程序,它将表单元素作为名称/值对的post变量发送到ajax处理程序。 您将遇到的问题是,当您在数据上运行表单验证程序时,它将始终失败。因为表单验证器需要该表单的所有字段,并且您一次只能发送一个数据。
通常在代码点火器示例代码中检查“run”方法是否为passess。在你的情况下它并不重要,因为它总是会失败,所以不要打扰检查。这是一些示例代码的片段
$this->form_validation->run('form'); // it is likely that the form won't validate, but thats ok.
$validation_error=form_error($field_name);
if($validation_error){
$feedback = 'Field <strong>NOT</strong> saved.';
}else{
// no errors, we can save.
$this->my_model->set_field($id,$field_name,$field_value);
$validation_error=' '; // this is set so if the field was initially not validated, and it is later, the validation message goes away.
$validation_element = '#'.$field_name;
$feedback = 'Field saved.';
}
...
echo json_encode(array('feedback'=>$feedback,'validation_element'=>'#'.$field_name,'validation_error'=>$validation_error));
break;
在我的代码片段中,json对象返回到ajax帖子。在jquery ajax帖子中,成功处理程序有这段代码。
try{
var json = $.parseJSON(data);
if(typeof(json.container)==='string'){
var container=json.container;
}
if(typeof(json.html)==='string'){
var con = $(container);
$(con).html(json.html);
}
if(typeof(json.feedback)==='string'){
display_feedback(json.feedback);}
if(typeof(json.validation_element) ==='string'){
// assumes that if a validation_element object is returned, it has a paired validation_error element.
$(json.validation_element).closest('.col_b').nextAll('.validation_error').first().html(json.validation_error);
}
}
catch(err){
display_feedback(err);
}
在我的表单中,我有三列格式,其中:
<div class='col_a'>label</div>
<div class='col_b' >input, id = field_name </div>
<div class='col_c validation_error'>validation text</div>
希望这对你有意义。