donglan9517 2018-09-05 14:10
浏览 81

Codeigniter表单验证在ajax请求上返回false

Before I start, sorry for my English. i am developing a website using CI on Backend. And i want to make a registration system without refreshing the page. If i try with post form submit i got no error and everything went good. but when I try using with ajax request, I can't use form validation because form validation return false and validation_errors is empty. if I disable form validation, ajax request works well. here is my controller and ajax request. Please help me.

User.php (My Controller)

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;
}

}

And here is my ajax request in js

$(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= [];
                        }

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

edit: and here is my form:

<!-- 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(); ?>

</div>
  • 写回答

2条回答 默认 最新

  • drj14664 2018-09-06 06:21
    关注
    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;
         }
       }
       }
      }
    
    评论

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法