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 に送り返す必要があります。コントローラーメソッドに直接投稿するのではなく、ajax を介してコントローラーを呼び出すので、リダイレクトします。

ログイン後に ajax 呼び出しへの応答として ajax スクリプトが出力し、ウェルカム コントローラーにリダイレクトするのは、コントローラー メソッドがリダイレクトするページの 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               
           }
     });

これは、物事がどのように機能するかの基本的な例です。もちろん、それを拡張したり、より堅牢にすることもできます。

于 2012-07-03T18:53:17.100 に答える