首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >代码点火器Ajax登录表单验证

代码点火器Ajax登录表单验证
EN

Stack Overflow用户
提问于 2017-12-15 07:49:33
回答 1查看 938关注 0票数 1

我已经有一段时间没有编写代码了,回来似乎很麻烦,因为我试图使用Codeigniter创建Ajax登录表单。实际上,一切都很好(我指的是验证部分),但是当我完成验证表单并应该登录时,表单就会停留在那里,盯着我看。我试图摆脱它,让自己登录,但我做不到

控制器:

代码语言:javascript
复制
public function login()
{
    $data = array(
        'success' => false,
         'messages' => array(),
          'session_error' => false,
           'session_error_message' => array());


    $this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]', array(
        'required' => '%s feild cannot be empty',
        'min_length' => '%s field must be at least 5 characters in length.'));



$this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[5]|max_length[12]', array(
        'required' => '%s feild cannot be empty',
        'min_length' => '%s field must be at least 5 characters in length.')); $this->form_validation->set_error_delimiters('<p class="text-danger" style="font-weight: bold">', '</p>');


    if ($this->form_validation->run() == TRUE ) {


        $user = $this->input->post('username');
        $pass = $this->input->post('password');


        if ($this->main_model->admin_login($user, $pass)) {

            $session_data = array('username' => $user);
            $this->session->set_userdata($session_data);
            redirect(base_url() . 'admin/dashboard', 'refresh');

        } else {


            $data['session_error'] = true;
            $this->session->set_flashdata('msg', '<p class="text-danger" style="font-weight: bold">Invalid Username or Password</p>');
            $data['session_error_message'] = $this->session->flashdata('msg');


        }

        $data['success'] = true;
    } else {


        foreach ($_POST as $key => $value) {
            $data['messages'][$key] = form_error($key);
        }


    }

    echo json_encode($data);
}

视图

代码语言:javascript
复制
  <form action="<?php echo base_url() ?>admin/login" method="POST" class="w3-container" id="aForm">
      <div class="form-group">
          <input type="text" class="w3-input w3-border w3-border-blue" name="username" value="Username" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Username';}" id="username">
     </div>

     <div class="form-group">
        <input type="password" class="w3-input w3-border w3-border-blue" name="password" value="Password" onfocus="this.value = '';" onblur="if (this.value == '') {this.value = 'Password';}" id="password">
    </div> 

    <button type="submit" name="" value="" class="w3-btn w3-border w3-border-blue">Submit</button>
</form>

JQuery

代码语言:javascript
复制
$('#aForm').submit(function(event) {
event.preventDefault();
$.ajax({
    url: $(this).attr('action'),
    type: 'POST',
    dataType: 'json',
    data: $(this).serialize(),
    success: function (response) {
        if (response.success == true) {

                if (response.session_error == true) {
                $('.text-danger').remove();
                var el = $('#password');
                el.closest('div.form-group').addClass('strong').find('.text-danger').remove();
                el.after(response.session_error_message);

            } else {

                $('.text-danger').remove();
                window.location.href = $(this).attr('action');

            }       
        }else {

            $.each(response.messages, function(key, value) {
                var element = $('#' + key);
                element.closest('div.form-group').addClass('strong').find('.text-danger').remove();
                element.after(value);
            });

        }



    }
})
});
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-15 07:58:17

问题就在这一行上:

代码语言:javascript
复制
redirect(base_url() . 'admin/dashboard', 'refresh');

如果不是基于AJAX的话,它可以正常工作。它对AJAX“不起作用”的原因是,它实际上可以工作,但是重定向的不是当前页面,而是重定向的AJAX调用。

然后,在重定向请求之前,需要检查请求是否是AJAX调用。如果它不是AJAX调用,那么您可以像往常一样重定向它,但是如果它是AJAX调用,则需要向客户端答复身份验证是成功还是失败。例如:

代码语言:javascript
复制
echo json_encode(['success' => true]); // or false

如果请求总是AJAX调用,则可以跳过AJAX请求检查,直接删除重定向,并将其更改为上面的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47827927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档