CodeIgniter`validate_errors()`无效

San*_*oob 6 php validation codeigniter codeigniter-2

我使用的是CodeIgniter 2.1.4版本.我在显示表单验证错误时遇到问题.表单验证正在返回false但未validation_errors()显示任何错误.我试过echo进去controller,view但没有结果.我通过ajax.no提出请求错误被抛出.

控制器:

<?php
class Dashboard extends Admin_Controller {

   public function ajax_new_dist_center($id=NULL)
   {
       $this->load->model('dist_centre_m');
       $this->load->helper(array('form', 'url'));
       $this->load->library('Form_validation');

       $validation = $this->dist_centre_m->rules;
       $this->form_validation->set_error_delimiters('<li>', '</li>');
       $this->form_validation->set_rules($validation);
       if ($this->form_validation->run() == TRUE)
       {
            if($this->dist_centre_m->create($id))
                echo 'New centre created';
            else
            {
                $this->output->set_status_header('404');
                echo 'Given center not found';
            }
       }
       else
       {
           $this->output->set_status_header('400');
           echo 'validation Failed';
           $this->load->view('alert_error');
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

视图:

<?php echo validation_errors();?>
<p>Testing Error</p>
Run Code Online (Sandbox Code Playgroud)

模型:

class dist_centre_m extends MY_Model {
    protected $_table_name = 'distribution_centre';
    protected $_primary_key = 'dis_id';
    protected $_order_by = 'dis_id';
    public $rules = array(
        'name' => array( 
            'field'=>'name',
            'label'=>'Center name',
            'rules'=>'trim|required|xss_cleaned|min_length[3]|max_length[45]'
        ),
        'street' => array(
            'field'=>'street',
            'label'=>'Street',
            'rules'=>'trim|required|xss_cleaned|min_length[3]|max_length[45]'
        ),
        'town' => array(
            'field'=>'town',
            'label'=>'Town',
            'rules'=>'trim|required|min_length[3]|max_length[45]|required|xss_cleaned'
        ),
        'postcode' => array(
            'field'=>'postcode',
            'label'=>'Postcode',
            'rules'=>'trim|required|max_length[10]|required|xss_cleaned'
        ),
        'tel' => array(
            'field'=>'tel',
            'label'=>'Telephone number',
            'rules'=>'trim|valid|exact_length[11]|required|xss_cleaned'
        ),
    );

    public function __construct() {
        parent::__construct();
        $this->load->helper('security'); 
    }

    public function create($id=NULL){
        $data = array(
                'name'      =>$this->input->post('name',true),
                'street'    =>$this->input->post('street',true),
                'town'      =>$this->input->post('town',true),
                'postcode'  =>$this->input->post('postcode',true),
                'tel'       =>$this->input->post('tel',true),
        );
        return $this->save($data,$id);
    }  
} 
Run Code Online (Sandbox Code Playgroud)

输出:

validation Failed

Testing Error
Run Code Online (Sandbox Code Playgroud)

没有相关问题有效,请不要标记重复.

更新: 我的Ajax请求页面:

 <form id="new-center-form" method="post">
                <div class="row">
                    <div class="col-md-8">
                        <div class="form-group">
                            <label for="name">Name</label>
                            <input type="text" name="name" placeholder="Name"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for='street'>Street</label>
                            <input type="text" name="street" placeholder="Street"/>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="town">Town</label>
                            <input type="text" name="town" placeholder="Town"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="postcode">Postcode</label>
                            <input type="text" name="postcode" placeholder="Postcode"/>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="tel">Phone</label>
                            <input type="text" name="tel" placeholder="Telephone"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-8">
                        <div class="form-group">
                            <button id="centre-submit" class="btn btn-primary pull-left">Save</button>
                        </div>
                    </div>
                </div>
            </form>


<script type="text/javascript">
    $(document).ready(function(){

        var url_new_center = '<?php echo page_url('new-center') ?>';

        $('#centre-submit').click(function(e){
            e.preventDefault();
            $.ajax({
                url:url_new_center,
                type:'post',
                data: $('new-center-form').serialize()
            }).done(function(response){
                $('#infos').html(response);
                $('#infos').slideDown();
                $('.new-centre').slideUp();
            }).fail(function(response){
                $('#errors').html(response);
                $('#errors').slideDown();
            });
        })
    });
</script>
Run Code Online (Sandbox Code Playgroud)

San*_*oob 3

经过长时间的睡眠我终于想通了。当没有找到数据时$this->form_validation->run()返回,并且不会设置任何打印错误。在我的 ajax 请求中,由于一些错误,它无法发送任何数据。感谢curl, 我能够测试它。false$_POST

更新

 data: $('new-center-form').serialize() // this was the error. 
Run Code Online (Sandbox Code Playgroud)

我在这里打错字了。这应该是这样的 data: $('#new-center-form').serialize()