如何对AJAX请求使用form_validation库规则

时间:2012-08-15 04:03:42

标签: ajax codeigniter

我的一个表单使用AJAX发送数据。由于我的页面永远不会因为AJAX重新加载,有没有办法我仍然可以使用form_validation来验证和输出哪些字段是错误的?我的表单使用jquery发送的网址是contact/ajax_send

整个AJAX工作正常,但我还没有插入任何验证。

3 个答案:

答案 0 :(得分:0)

由于您使用ajax发送数据,您可以做的只是在插入数据库之前添加form_validation代码调用。

如果存在任何验证错误,您可以将错误消息作为json响应返回到前端以显示错误消息。

答案 1 :(得分:0)

表单验证库将所有发生的错误分配给名为_error_array的私有数组,但不公开它或提供文档(请注意第一个下划线?)。只需返回控制器中错误的json编码对象:

echo json_encode($this->form_validation->_error_array);


如果您愿意,可以扩展CodeIgniter的表单验证库,可能会返回FALSE而不是空数组......或者您认为合适的任何内容:

/* libraries/MY_Form_validation.php */
<?php
class MY_Form_validation extends CI_Form_validation
{   
     function __construct($config = array())
     {
          parent::__construct($config);
     }

    function error_array()
    {
        if (count($this->_error_array) === 0) return FALSE;
        else return $this->_error_array;
    }
}

现在,删除控制器中的初始下划线:

echo json_encode($this->form_validation->error_array);

然后在客户端上解码并显示错误。

答案 2 :(得分:0)

我找到了一种方法,部分归功于乔丹的回答。这将返回一个数组,其中包含有错误的字段的名称。

// library/MY_Form_validation.php
class MY_Form_validation extends CI_Form_validation {

    public function get_field_data(){
        return count($this->_field_data) ? $this->_field_data : FALSE;
    }

}

// Controller file
$field_data = $this->form_validation->get_field_data();
foreach($field_data as $key=>$val){
    if($key == '__proto__') break;
    foreach($val as $k=>$v){
        if($k == 'error' && !empty($v)) $errors[] = $key;
    }
}
$return = array('success'=>FALSE, 'errors'=>$errors);

上面的代码检查error密钥是否为空。空值表示它通过了CI验证,而没有空值将包含您在使用validation_errors()时看到的字符串。由于我在那些有错误的字段之后,我只需要查看哪些值为空而忽略了那些。