2013-01-05 80 views
1

我想使用codeigniter form_validator库验证表单。我该如何验证codeigniter中的ajax表格

问题是数据来自ajax,所以我不明白代码应该如何。

public function register(){ 
    $this->load->library('form_validation'); 
    $json = $_POST['data']; 
    $json = json_decode($json); 
    $data = get_object_vars($json); 

    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean'); 
    if($this->form_validation->run()){ 
     echo 'asdf'; 
    } else { 
     echo 'xyz'; 
    } 

} 

您可以看到$ _POST超全局数组有一个$ data数组。我怎样才能验证$ data数组并返回一个带有json编码数组的状态和错误消息的响应?

这是我如何使用AJAX发送数据的方式:

function register(){ 
    var site_url = $("#site_url").val(); 
    var post_url = site_url+"index.php/ajax/register"; 

    var details = { }; 

    details.username = $("#username").val(); 
    details.password = $("#password").val(); 
    details.rpassword = $("#rpassword").val(); 
    details.country = $("#country").val(); 
    details.postal_code = $("#postal_code").val(); 
    details.email = $("#email").val(); 
    details.date_of_birth = $("#date_of_birth").val(); 


    var json = JSON.stringify(details); 

    $.post(post_url, {'data': json}, function(data){ 
     alert(data); 
     //data = JSON.parse(data); 



    }); 

    return false; 
} 

谢谢。

+0

你是如何从视图发送数据的数据,你可以展示AJAX调用? –

+0

我编辑了第一篇文章。我已经添加了ajax代码。 –

+0

为什么要序列化数据并将其作为JSON发送?为什么不使用POST字段? –

回答

2

好的还没有测试过,但它应该工作。

首先不要打扰发送数据到你的控制器作为json,只是发送它作为一个普通的发布请求。

$.post(post_url, {'data': details}, function(data){ 

然后在控制器中,您可以像处理任何表单验证一样处理验证。

public function register(){ 
$this->load->library('form_validation'); 
$this->form_validation->set_rules($this->input->post('username'), 'Username', 
'trim|required|min_length[5]|max_length[12]|xss_clean'); 
if($this->form_validation->run()==FALSE){ 
    $errors = 'Username error here'; 
} 
//You can iterate through any other validation rules building the $errors 
//variable then pass them back to the view with: 

if(isset($errors)) 
{ 
    print json_encode(array("status"=>"error", "message"=>$errors)); 
} else { 
    /execute pass code here 
} 

} 

之后,你可以在视图中回显错误,如果有的话。

+0

它不起作用。我不知道$ this-> validaton_form对象知道如何在$ _POST ['username']的$ _POST数组中查找。 '$ this-> input-> post ['username]''在那里是什么?代码需要逃脱工作。 –

+1

这就是codeigniter处理$ _POST对象的方式。验证的第一个参数是要验证的内容,第二个参数是如果出现错误时要返回给用户的用户友好名称,第三个参数是要检查的内容。我也注意到验证行中有一个错字。现在就试试。 –

+0

grrr,另一个错字。我使用自定义输入处理程序,$ this-> input-> post not square上的圆括号。 –

3

the documentation

“注意:这些规则也可以被称为为离散功能。例如函数:$ this-> form_validation->需要($字符串);”。

0

有一种验证不是来自POST/GET请求的数据的方法。 我觉得这个环节应该有所帮助:https://www.codeigniter.com/userguide3/libraries/form_validation.html#validating-an-array-other-than-post

我测试的是来自解码php://input

$filters_obj = json_decode(file_get_contents('php://input')); 
$this->form_validation->set_data($filters_prop_arr); 
$this->form_validation->set_rules('email', 'Full Name', 'required'); 

if ($this->form_validation->run() == false) { 
    var_dump('not workin'); 
    return false; 
}