2012-07-03 87 views
1

嘗試在成功登錄後執行重定向。登錄信息使用ajax發送到控制器。登錄後在codeigniter中重定向

我的控制器代碼如下

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

回答

2

當你正在使用AJAX調用控制器的方法,你需要發回一些變量或值(表示成功或不成功的登錄)回到使ajax調用來處理重定向的javascript。換句話說,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    
      } 
    }); 

這是一個基本的例子事情應該如何工作。您當然可以擴展它或使其更加強大。

+0

任何想法如何在ajax中重定向? msg =='success'時使用window.location.href。它不起作用 – edelweiss

+0

它應該工作。你可以在javascript控制檯中得到錯誤。您應該在控制檯中爲您正在使用的瀏覽器獲取錯誤。請讓我們知道您正在使用哪個瀏覽器,以便我們可以幫助您獲取控制檯消息。 – Amitabh

+0

我使用谷歌瀏覽器和開發人員工具作爲調試器。我沒有看到控制檯中的任何錯誤。 – edelweiss