0

我是codeigniter的新手,很抱歉这个简单的问题。

我想为我的 ajax 进程运行 formvalidator。如何将验证错误返回为 JSON?有一个更好的方法吗?

谢谢

4

1 回答 1

0

你还没有真正说明你在做什么。我将假设您有一个要使用 ajax 保存数据的表单,这样您就没有任何讨厌的保存/提交按钮。另外,我猜你有某种 .change() 处理程序,它将表单元素作为名称/值对的 post 变量发送到 ajax 处理程序。您将遇到的问题是,当您对数据运行表单验证器时,它总是会失败。因为表单验证器需要该表单的所有字段,并且您一次只能发送一条数据。

通常在代码点火器示例代码中,您检查“运行”方法是否通过。在您的情况下,这并不重要,因为它总是会失败,所以不要费心检查。这是一些示例代码的片段

$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='&nbsp;';  // 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>

希望这对你有意义。

于 2012-06-30T13:56:10.983 回答