登录后重定向到codeigniter

时间:2012-07-03 18:45:12

标签: ajax codeigniter

成功登录后尝试重定向。登录信息使用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 bootstrap

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

1 个答案:

答案 0 :(得分:2)

当您使用ajax调用控制器方法时,您需要将一些变量或值(以表示成功或不成功登录)发送回javascript,这使得ajax调用处理redirect.Or换句话说javascript应该处理重定向,因为你没有通过直接发布到控制器方法来调用控制器,而是通过ajax。

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

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

然后,您可以使用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               
           }
     });

这是一个基本的例子。您当然可以扩展它或使其更强大。