关于php:在codeigniter中如何使用ajax登录后重定向

In codeigniter How to redirect after login using ajax

我有一个登录弹出窗口Modal。 我正在通过ajax登录

语气

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
              <form action="<?php echo base_url('Login');?>" method="POST">
                 
                    <input type="text" placeholder="Email or Mobile*" value="" id="loginEmail" name="email" class="form-control input-feild">

                 
                 
                    <input type="password" placeholder="Password*" value="" id="loginPassword" name="password" class="form-control input-feild">

                 
                 
                    <input type="button" id="l_submit" name="l_submit" value="Login" class="btn btn-primary input-feild">
                 
               </form>
               <p id="error-msg">
</p>

我正在尝试使用ajax成功登录后重定向。 如果电子邮件和密码正确,则重定向到任何页面。 如果没有,那么它将显示错误。

调节器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function index() {

        $this->form_validation->set_rules('email', 'Email', 'trim|required');
        $this->form_validation->set_rules('password', 'Password', 'trim|required');

        if ($this->form_validation->run() == false) {
            echo validation_errors();

        }else {
                $email      = $this->input->post("email");
                $password   = $this->input->post("password");
                $user = $this->Perfect_mdl->check_user($email, $password);
                if ($user) {

                    $logged_in_data = array();
                    foreach ($user as $logged_in_data) {
                        $logged_in_data = array(

                                    'id' => $user[0]->id,
                                    'email' => $user[0]->email
                                );
                    }

                    $this->session->set_userdata($logged_in_data);
                    $id = $this->session->userdata('email');
                    $data['details'] = $this->Perfect_mdl->get_login_user_detail($id);

                    echo"Yes";

                }else {

                    echo"No";
                }
        }
    }

这是我的控制器,我正在检查登录用户的电子邮件和密码是否正确/不正确。

这是我的剧本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 <script type="text/javascript">  
        $("#l_submit").click(function(){

            var email  = $("#loginEmail").val();
            var password   = $("#loginPassword").val();

            $.ajax({
                url :"<?php echo base_url('Login');?>",
                type: 'POST',
                data : {'email':email,'password':password},
                success: function(msg) {

                        if (msg =="Yes")
                           window.location.href="<?php echo current_url(); ?>";
                        else if (msg =="No")
                            $('#error-msg').html('Incorrect Email & Password. Please try again ...');
                        else
                            $('#error-msg').html('' + msg + '');
                    }
            });
            return false;
        });

正如您在成功部分中看到的那样,当我输入正确的电子邮件/密码时。 它显示是。 但我想重定向另一个页面,为什么在正确的电子邮件/密码上显示YES。并且在错误的电子邮件/密码上显示NO。

我做错了什么?


您需要在jQuery和Controller函数中更改几行代码。这里我附上你的代码的更新版本。请参考以下内容:

查看(Bootstrap Modal)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
          <form action="<?php echo base_url('Login');?>" method="POST">
             
                <input type="text" placeholder="Email or Mobile*" value="" id="loginEmail" name="email" class="form-control input-feild">

             
             
                <input type="password" placeholder="Password*" value="" id="loginPassword" name="password" class="form-control input-feild">

             
             
                <input type="button" id="l_submit" name="l_submit" value="Login" class="btn btn-primary input-feild">
             
           </form>
           <p id="error-msg">
</p>

这是您的视图文件。它将保持不变。在单击按钮时,您已编写了需要修改的脚本。附加控制器功能后会发现:

调节器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function index() {
    if (!$this->input->is_ajax_request()) {
        echo 'No direct script is allowed';
        die;
    }
    $this->form_validation->set_rules('email', 'Email', 'trim|required');
    $this->form_validation->set_rules('password', 'Password', 'trim|required');

    if ($this->form_validation->run() == false) {
        $result['status'] = 'error';
        $result['message'] = validation_errors();
    }else {
        $email      = $this->input->post("email");
        $password   = $this->input->post("password");
        $user = $this->Perfect_mdl->check_user($email, $password);
        if ($user) {
            $logged_in_data = array();
            foreach ($user as $logged_in_data) {
                $logged_in_data = array(
                    'id' => $user[0]->id,
                    'email' => $user[0]->email
                );
            }
            $this->session->set_userdata($logged_in_data);
            $id = $this->session->userdata('email');
            $data['details'] = $this->Perfect_mdl->get_login_user_detail($id);
            $result['status'] = 'success';
            $result['message'] = 'Yeah! You have successfully logged in.';
$result['redirect_url'] = base_url();
        }else {
            $result['status'] = 'error';
            $result['message'] = 'Whoops! Incorrect Email & Password. Please try again';
        }
    }
    $this->output->set_content_type('application/json');
    $this->output->set_output(json_encode($result));
    $string = $this->output->get_output();
    echo $string;
    exit();
}

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script type="text/javascript">
$("#l_submit").click(function(){

    var email  = $("#loginEmail").val();
    var password   = $("#loginPassword").val();

    $.ajax({
        url :"<?php echo base_url('Login');?>",
        type: 'POST',
        data : {'email':email,'password':password},
        success: function(resp) {

            if (resp.status =="success")
                window.location.href = resp.redirect_url;
            else
                $('#error-msg').html('' + resp.message + '');
        }
    });
    return false;
});

这是正确的答案。如果您遇到任何问题,请告诉我。


检查您的退货数据类型。可能是您可以在Ajax代码中使用数据类型。如果条件,则返回数据无法读取。我面临同样的问题或使用它

if($ .trim(msg)=='是'){


如果要从脚本跳转到另一个控制器/方法,可以在代码中使用简单的redirect()(在url帮助器中)。但是,这不会提醒用户登录成功:它只是一个简单的重定向。

正确的方法是返回一个json文件,所以不要回显是或否,请使用:

1
2
3
4
5
$response['type'] = 'error';
$response['msg'] = 'Login Succesful';
$response['redirect'] = 'http://your-url.com/controller/method';
echo json_encode($response);
die;

然后,你在ajax调用中处理答案,并且一些好的警报(在我的情况下,Sweet Alert)有点像这样:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
success: function(data) {
    if (data.redirect) {
        swal({
            title: '?Success!',
            text: data.msg,
            timer: 2000,
            type: data.type,
            showConfirmButton: false
        }, function() {
            window.location.href = data.redirect;
        });
    } else {
        swal('?Error!', data.msg, data.type);
    }
}

所以这段代码的作用是,如果你的json响应有一个重定向字段,会在一段时间后触发重定向。但是,如果您的json响应没有字段重定向,则只会显示警报。


echo"Yes";更改为die("Yes");。这将确保在"是"或"否"之后不会发送任何内容,然后JS代码将按预期工作。