成功登录后尝试重定向。登录信息使用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');
}
});
});
});
答案 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
}
});
这是一个基本的例子。您当然可以扩展它或使其更强大。