【问题标题】:Codeigniter form validation return false on ajax requestCodeigniter 表单验证在 ajax 请求上返回 false
【发布时间】:2018-09-05 14:10:23
【问题描述】:

在我开始之前,对不起我的英语。我正在 Backend 上使用 CI 开发一个网站。 我想在不刷新页面的情况下制作一个注册系统。如果我尝试提交表单提交,我没有收到任何错误,一切都很顺利。但是当我尝试与ajax request 一起使用时,我不能使用表单验证,因为表单验证返回false 并且validation_errorsempty。如果我禁用表单验证,ajax 请求效果很好。这是我的控制器和 ajax 请求。请帮帮我。

User.php我的控制器

public function register(){  
$this->load->library('form_validation');
    $this->form_validation->set_rules('email_kyt', 'Email', 'is_unique[users.email]');
    $this->form_validation->set_rules('username_kyt', 'Kullanici', 'is_unique[users.username]');

   if($this->form_validation->run() == FALSE) {
        $data = json_encode(array('status'=> false,'info'=>validation_errors()));

    }else {

    if($this -> input -> is_ajax_request()){
          $userData = array(
            'email' => strip_tags($this->input->get('email_kyt')),
            //bla bla,
        );

        if ($this->User_model->form_insert($userData) == true) { //this method works perfectly.
            $data = json_encode(array('status' => true,'info' => 'Successfully Registered'));
        } else {
            $data = json_encode(array('status' => false,'info'=>'The Error Occurred During Registration'));
        }
    }else{
        $data = json_encode(array('status'=> false,'info'=>'This is not Ajax request'));
        }
    }
    echo $data;
}

}

这是我在 js

中的ajax 请求
$(document).ready(function(){
  $('#btn_register').on('click',function (e) {

    $('form[name=register-form]').unbind("submit"); 
            $('form[name=register-form]').submit(function (e) {
                e.preventDefault();
                $.ajax({
                    type: 'get',
                    url: url + 'User/register', //url is correct i tested without form validation   
                    data: $('#register-form').serialize(),
                    dataType: "json",
                    success: function (data) {

                        if (data.status == true) {
                            alert(data.info);
                            window.location.reload();
                            json= [];

                        } else if (data.status == false) {
                            $('#span_validate').html(data.info);
                            json= [];
                        }

                    }
                });
            });
       });
});

编辑:这是我的表格:

<!-- Register Form -->

<?php echo form_open(base_url('index.php/User/register'),array('id' => 'register-form','name' => 'register-form')); ?>
       <?php echo  form_hidden($this->security->get_csrf_token_name(), $this->security->get_csrf_hash());  ?>
                            <div class="md-form">
                                <input type="text" id="name_kyt" name="name_kyt" class="form-control" data-toggle="popover" data-trigger="focus" data-content="...">
                                <label for="name_kyt" >Name</label>
                            </div>
                            <div class="md-form">
                                <input type="text" id="surname_kyt" name="surname_kyt" class="form-control" data-toggle="popover" data-trigger="focus" data-content="...">
                                <label for="surname_kyt" >Surname</label>
                            </div>
                            <div class="md-form">
                                <input type="text" id="username_kyt" name="username_kyt" class="form-control" data-toggle="popover" data-trigger="focus" data-content="...">
                                <label for="username_kyt" > Username </label>
                            </div>
                            <div class="md-form">
                                <input type="email" id="email_kyt" name="email_kyt" class="form-control" data-toggle="popover" data-trigger="focus" data-content="...">
                                <label for="email_kyt" >Email</label>
                            </div>
                            <div class="md-form">
                                <input type="password" id="password_kyt" name="password_kyt" class="form-control" data-toggle="popover" data-trigger="focus" data-content="...">
                                <label for="password_kyt" >Password</label>
                            </div>
                            <div class="md-form">
                                <input type="password" id="password_confirm" name="password_onay" class="form-control">
                                <label for="password_confirm" >Password Confirm</label>
                            </div>
                            <div class="form-group text-center">
                                <div class="row">
                                    <div class="col-sm-10 col-sm-offset-3 mr-auto ml-auto">
                                        <input type="submit" name="btn_register" id="btn_register" tabindex="4" class="btn btn-register mr-auto ml-auto" value="Register">
                                        <p><span id="span_validate" class="label label-default mr-auto ml-auto"></span></p>

                                    </div>
                                </div>
                            </div>
                            <!-- End of Register Form -->
                        <?php echo form_close(); ?>

【问题讨论】:

  • 此处缺少信息的关键部分:您能否显示表单所在的 HTML 的相关部分? form_validation 返回的确切验证错误是什么?
  • 我已经编辑了帖子..它没有显示错误,只是空...
  • 如果没有返回错误但表单看起来没有通过验证,这可能意味着由于某种原因,在采用 Ajax 方式时发布数据没有到达您的控制器。您可以通过在控制器上添加required 规则来确认或放弃这一点,然后尝试再次提交表单以查看会发生什么。如果它抱怨缺少您确定已填写的必填字段,我们可能会缩小范围
  • 我尝试了只需要验证,但它仍然返回 false 并且没有验证错误...如果我禁用 form_validation,我的功能运行良好。我不知道为什么会这样。

标签: php jquery ajax codeigniter


【解决方案1】:
Please refer below example to validate a form in CodeIgniter using ajax call.
 1. ajax code.

 $(document).ready(function(){
  $('#btn_register').on('click',function (e) {
   $('form[name=register-form]').unbind("submit"); 
        $('form[name=register-form]').submit(function (e) {
            e.preventDefault();
    var formData = $("#register-form").serialize();
            $.ajax({
                type: 'get',
                url: url + 'User/register', 
                data: formData,
                 success: function (data) {
                    if (data.status == true) {
                        alert(data.info);
                        window.location.reload();
                        json= [];
                    } else if (data.status == false) {
                        $('#span_validate').html(data.info);
                        json= [];
                    }
                }
            });
        });
    });
  });

  2. Controller code :
  Load  form_validation library and form helper
  $this->load->library('form_validation');
  $this->load->helper('form');

  Now write your controller as ...
  public function register(){  
   $this->load->library('form_validation');
   $this->load->helper('form');
   $this->form_validation->set_rules('email_kyt', 'Email', 'is_unique[users.email]');
   $this->form_validation->set_rules('username_kyt', 'Kullanici', 'is_unique[users.username]');

    if($this->form_validation->run() == FALSE) {
     echo $data = json_encode(array('status'=> false,'info'=>validation_errors())); die;

     }else {
    if($this -> input -> is_ajax_request()){
        $userData = array(
        'email' => strip_tags($this->input->get('email_kyt')),
        //bla bla,
     );

      if ($this->User_model->form_insert($userData) == true) { //this method works perfectly.
        echo $data = json_encode(array('status' => true,'info' => 'Successfully Registered')); die;
      } else {
        echo $data = json_encode(array('status' => false,'info'=>'The Error Occurred During Registration')); die;
     }
     }else{
      echo  $data = json_encode(array('status'=> false,'info'=>'This is not Ajax request')); die;
     }
   }
   }
  }

【讨论】:

  • 感谢您的回复,但仍然返回 false :/
  • is_unique 验证规则通过在用户数据库表中查找名为 username 的字段来工作。如果存在具有相同值的字段,则验证为 false。
【解决方案2】:

我已经解决了这个问题。表单验证仅适用于 post 方法。如果你使用 get 方法,它将不起作用。

【讨论】:

    猜你喜欢
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 2016-02-22
    相关资源
    最近更新 更多