1

成功登录后尝试进行重定向。登录信息使用 ajax 发送到控制器。

我的控制器代码如下

public function login_controller_function()
{
    $this->load->model('login_model');
    if ($this->input->is_ajax_request())
    {
        $user_name=$this->input->post('username');
        $user_password = $this->input->post('password');
        $this->load->helper('url');
        $result = $this->login_model->verify_user($user_name,$user_password);
        //  echo 'user_logged_in';
        if(strcmp($result,'user_logged_in')==0)
        {
            redirect('welcome');

        }
    }
}

但它根本不起作用。有谁知道怎么了?

嗨,我的 html 按要求。我也在使用 twitter 引导程序

<li class="divider-vertical"></li>
<li><a href="#" id="login_btn">Login</a></li>
<li><a href="<?php echo base_url('register'); ?>">Register</a></li>

对于按钮,所以当我单击登录按钮时,将出现一个模式窗口并询问登录信息。

所以当我点击登录按钮时,我的 js 代码将发送一个 ajax 请求

我的js代码如下

    /*Attempt register user jquery ajax*/
    $('#login').click(function(){ 

        var user_name = $('#loginHere').find('#user_name').val();

        var user_password = $('#loginHere').find('#login_pwd').val();

        if(user_name==""||user_password=="")
            return;

        var login_data = { username:user_name, password:user_password};


                $.ajax({
        type: "POST",
        dataType: "json",
        async: false,
        url:"login_register/login_controller_function",
        data: login_data,
        success: function(data) {
            if(data.login)
            {
                alert(data.redirect);
                window.location.replace(data.redirect);

            }
            else if(!data.login)
            {
                alert('data login not true');
            }
        },
        error:function(data){
            alert('ajax error');
        }
    });
    });
});
4

1 回答 1

2

当您使用 ajax 调用控制器方法时,您需要将一些变量或值(以指示登录成功或不成功)发回给进行 ajax 调用以处理重定向的 javascript。或者换句话说,javascript 应该处理重定向,因为您不是通过直接发布到控制器方法来调用控制器,而是通过 ajax。

ajax 脚本在登录后将输出作为对 ajax 调用的响应,然后重定向到欢迎控制器是控制器方法将重定向到的页面的整个 HTML,这不是处理 ajax 调用的正确方法。

所以我建议,您应该在登录成功后在控制器中设置一些会话值,并将一些值发送回 ajax 方法以指示 iof 登录成功或失败。

然后,您可以使用 javascript 重定向,并且当您通过 javascript 重定向到安全页面时,您应该设置会话。

控制器:


public function login_controller_function(){
$this->load->model('login_model');
if ($this->input->is_ajax_request())
{
    $user_name=$this->input->post('username');
    $user_password = $this->input->post('password');
    $this->load->helper('url');
    $result = $this->login_model->verify_user($user_name,$user_password);
    //  echo 'user_logged_in';
    if(strcmp($result,'user_logged_in')==0)
    {
     //set the session variables here so that I can access the secure area 

     //send back response to the ajax method  
     print 'success';

    }else{
        //send back response to the ajax method
        print 'failure';
    }
}

}

ajax脚本:


$.ajax({
       type: "POST",
       url: "<?php echo base_url();?>index.php/login/login_controller_function",
       data: "userName="+$('#userName').val()+"&passWord="+$('#password').val(),
       cache:false,
       success: function(msg)
           {            
            if(msg =='success'){
            //redirect to dashboard
            }
            if(msg == "failure"){
            //display login error message               
           }
     });

这是事物应该如何工作的基本示例。您当然可以扩展它或使其更健壮。

于 2012-07-03T18:53:17.100 回答