我的一种形式使用 AJAX 发送数据。由于 AJAX 导致我的页面永远不会重新加载,有没有办法我仍然可以使用form_validation
它来验证和输出哪些字段是错误的?我的表单使用 jquery 发送到的 url 是contact/ajax_send
.
整个 AJAX 工作正常,除了我还没有插入任何验证。
我的一种形式使用 AJAX 发送数据。由于 AJAX 导致我的页面永远不会重新加载,有没有办法我仍然可以使用form_validation
它来验证和输出哪些字段是错误的?我的表单使用 jquery 发送到的 url 是contact/ajax_send
.
整个 AJAX 工作正常,除了我还没有插入任何验证。
由于您使用 ajax 发送数据,您可以做的是,只需在插入数据库之前添加 form_validation 代码调用。
如果有任何验证错误,您可以将错误消息作为 json 响应返回到前端以显示错误消息。
表单验证库将发生的所有错误分配给名为 的私有数组_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);
然后在客户端解码并显示错误。
我找到了一种方法,部分归功于乔丹的回答。这将返回一个数组,其中包含有错误的字段的名称。
// 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()
。由于我在寻找那些有错误的字段,所以我只需要查看哪些值不为空而忽略那些值。