在codeigniter中进行Ajax表单验证

Kha*_*led 9 validation jquery codeigniter

hellp伙计们,

我最近一直在研究ajax,我在使用codeigniter表单验证库时遇到了问题.我使用了函数http://formtorch.geekhut.org/中生成的工具示例 .现在,当我使用json_encode()带有伪数据的函数时,ajax可以正常工作并正确返回数据,但是示例中的验证使用validation库而不是form_validation库,这似乎是旧版本.

为此,在该示例中验证不适用于ajax,特别是$this->form_validation->run()函数使得ajax返回没有结果,即使我json_encode()在开头使用回显虚拟数据create_course().

那么使用ajax验证有什么问题,并向我解释一下控制器收到的ajax发送的数据.

所以这是我的代码:

    function create_course()
{   
        $this->form_validation->set_rules('course_code', 'course_code', 'trim|xss_clean|required');
        $this->form_validation->set_rules('name', 'name', 'xss_clean|required');
        // .. etc           
        if ($this->form_validation->run()) {            
            // validation ok
            $data['course_code'] = $this->form_validation->set_value('course_code');
            $data['name'] = $this->form_validation->set_value('name');
            // ... etc
            if ($this->models_facade->create_course($user_id,$data))    {   // success
                    $data = array( 'profile_change' => $this->lang->line('profile_change'));
            } else {                    // fail 
                    $data = array( 'profile_change_error' => $this->lang->line('profile_change_error'));
            }
        }
        else
        {
            $data = array(
                    'course_code' => $this->form_validation->course_code_error, 
                    'name' => $this->form_validation->name_error
            );
        }        
        echo json_encode($data);
    }
Run Code Online (Sandbox Code Playgroud)

这是Jquery Ajax函数

   $(function(){
   $("#submit").click(function(){
        var course_code = $("#course_code").val(); 
        var name = $("#name").val(); 
        // etc          
        $.post("<?php echo base_url() ?>home/create_course",  course_code:course_code, name:name},
    function(data){
        function(data){
            alert(data.data);
            $("#course_code_error").html(data.course_code);
            $("#name_error").html(data.name);
        },'json');
   });
   return false;
Run Code Online (Sandbox Code Playgroud)

});    

eri*_*bae 7

您可以使用Form Helper方法"form_error()"来调用错误消息,而不是通过"this-> form_validation-> xxxx_error"打印出来.

所以你可以做点什么......

$data = array(
                    'course_code' => form_error('course_code'), 
                    'name' => form_error('name')
            );
Run Code Online (Sandbox Code Playgroud)


jjw*_*ign 5

您还可以考虑为JSON数据设置输出内容类型标头.

$this->output->set_content_type('application/json');
echo json_encode($data);
Run Code Online (Sandbox Code Playgroud)


小智 3

您使用的是哪个版本的 Codeigniter?您是否记得在构造中加载验证库?

$this->load->library('form_validation');
Run Code Online (Sandbox Code Playgroud)