【问题标题】:Can't get an ajax response in Codeigniter在 Codeigniter 中无法获得 ajax 响应
【发布时间】:2020-02-14 10:43:34
【问题描述】:

我是 codeigniter 的新手,正在尝试构建登录系统。我的控制器和我的模型工作正常,唯一的问题是 url 更改并且似乎是 domainName/controller/function 我不喜欢所以我用谷歌搜索并制作了一个 AJAX 函数,但是当我添加 AJAX 时,该函数总是返回错误函数而不是成功函数部分。

我的观点

<!-- <form class="login100-form validate-form" method="POST" action="<?php echo base_url(); ?>welcome/login_validation"> -->
                <form class="login100-form validate-form" method="POST" id="login">
                    <span class="login100-form-title">Member Login</span>

                    <div class="text-center">
                        <span class="text-danger"><?php echo $this->session->flashdata("error"); ?></span>  
                    </div>

                    <div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz">
                        <input class="input100" type="email" name="email" id="email" placeholder="Email" value="<?php echo set_value('email'); ?>" >
                        <span class="focus-input100"></span>
                        <span class="symbol-input100">
                            <i class="fa fa-envelope" aria-hidden="true"></i>
                        </span>
                        <span class="text-danger"><?php echo form_error('email'); ?></span>
                    </div>

                    <div class="wrap-input100 validate-input" data-validate="Password is required">
                        <input class="input100" type="password" name="password" id="password" placeholder="Password" value="<?php echo set_value('password'); ?>">
                        <span class="focus-input100"></span>
                        <span class="symbol-input100">
                            <i class="fa fa-lock" aria-hidden="true"></i>
                        </span>
                        <span class="text-danger"><?php echo form_error('password'); ?></span>
                    </div>

                    <div class="container-login100-form-btn">
                        <button class="login100-form-btn" type="submit">Login</button>
                    </div>

                    <div class="text-center p-t-12">
                        <span class="txt1">Forgot</span>
                        <a class="txt2" href="">Username / Password?</a>
                    </div>

                    <!-- <div class="text-center p-t-136">
                        <a class="txt2" href="#">
                            Create your Account
                            <i class="fa fa-long-arrow-right m-l-5" aria-hidden="true"></i>
                        </a>
                    </div> -->
                </form>

我的控制器

class Welcome extends CI_Controller {
    public function login_validation(){
            $this->load->library('form_validation');
            $this->form_validation->set_rules('email', 'Email', 'trim|required|valid_email', array(
                'required' => '%s feild cannot be empty',
                'valid_email' => 'Please Enter a Valid Email'
            ));
            $this->form_validation->set_rules('password', 'Password', 'required');

            if($this->form_validation->run()){
                $email = $this->input->post('email');
                $password = $this->input->post('password');

                $this->load->model('main_model');
                // $data['can_login'] = $this->main_model->login($email, $password);
                echo json_encode($data);

                //With Session
                if($this->main_model->login($email, $password)){
                    $user_session = array(
                        "email" =>  $email
                    );
                    $this->session->set_userdata($user_session);
                    redirect(base_url() . 'welcome/check_user_session');

                }
                else{
                    $this->session->set_flashdata('error', 'Invalid Email or Password');
                    $this->index();
                }
            }
            else{
                $this->index();
            }
        }

        public function check_user_session(){
            if($this->session->userdata('email') != ''){
                // echo $this->session->userdata('email');
                redirect(base_url() . 'welcome/user_info');
            }
            else{
                redirect(base_url() . 'welcome/index');
                $this->session->set_flashdata('error', 'Your are already loged in');
            }
        }
}

我的模型

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');

class Main_model extends CI_Model{

    public function login($email, $password){
        $this->db->where("email", $email);
        $this->db->where("password", $password);
        $can_login = $this->db->get("users");

        if($can_login->num_rows() > 0){
            return true;
        }
        else{
            return false;
        }
    }
}

?>

我的 AJAX 函数

<script type="text/javascript">
        $(document).ready(function(){
            $('#login').submit(function(e){
                e.preventDefault();
                // var user_email = $('#email').val();
                var user_email = $("input[name='email']").val();
                var user_password = $('#password').val();

                $.ajax({
                    method: 'POST',
                    url: '<?php echo base_url(); ?>welcome/login_validation',
                    dataType: 'json',
                    // data: new FormData(this),
                    data: {
                        email: user_email,
                        password: user_password
                    },
                    contentType: false,
                    processData: false,

                    success: function(res){
                        alert(res);
                        alert('Loged In');

                    },
                    error: function(data){
                        //alert('Unsuccessful');
                        console.log(data);
                    }
                });
            });
        });
    </script>

【问题讨论】:

  • 以纯文本形式存储密码是个坏主意
  • 错误函数返回了什么?
  • @Akintunde-Rotimi 我知道,但这仅用于测试目的
  • @CaduDeCastroAlves ajax 将进入一个错误函数,第一个警报(不成功)和第二个警报 [object object1]。
  • 能否请您 console.log() 错误?你应该更具体。

标签: php ajax codeigniter codeigniter-3


【解决方案1】:

主要问题(可能还有其他问题)是您在控制器中所做的事情。

响应 ajax 请求的函数必须向服务器返回一些内容。您的 ajax 设置期望从服务器获取 JSON。但是您似乎正在尝试(根据情况)加载视图(即'$this->index();')或重定向到不同的页面。这两个操作都不适合处理 ajax 请求的函数。

login_validation() 应该只做一件事

echo json_encode($data);

$data['can_login'] 设置为 true 或 false。

返回$ajax.success:,您会做出相应的回应。

如果你想重定向,你必须使用 javascript 来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多