我制作了一个简单的PHP MVC框架,我将其用于我的Web应用程序。但是,当尝试AJAX请求(使用jQuery)时,它的行为并不像预期的那样。以下是相关的代码片段:
查看
<input type="text" name="email" id="email">
<input type="password" name="password" id="password">
<a id="btnlogin">Login</a>
Jquery(放置在单独的文件中)
$("#btnlogin").click(function(){
var email = $("#email").val();
var password = $("#password").val();
$.ajax({
type:"POST",
url:"user/login",
data:{email : email, password : password},
cache:false,
success:function(){
alert("suksesssssss");
}
});
控制器名称:用户
public function login()
{
$email = $_POST['email'];
$password = $_POST['password'];
$this->model->login($email,$password);
}
型号名称:UserModel
public function login($email,$password)
{
$sth = $this->db->prepare("select * from tbl_user where email = :email and password = :password");
$sth->execute(array(
':email' => $email,
':password' => Hash::create('sha256', $password, PASSWORD_HASH_KEY)
));
$count = $sth->rowCount();
if($count > 0)
{
$data = $sth->fetch();
Session::init();
Session::set('id', $data['id']);
Session::set('fullName', $data['nama_lengkap']);
$this->updateLastLogin($data['id']);
$this->updateLoginCount($data['id']);
header('location:' . URL . 'user/profile');
}
else
{
header('location:' . URL . 'home/alogin');
}
}
我的目标是在登录成功时重定向到个人资料页面。但功能:
header('location:' . URL . 'user/profile');
这不会运行..
导致此行为的原因是什么?如果我使用jQuery重定向到另一个页面,它会更好吗?
答案 0 :(得分:10)
在执行AJAX时,您无法使用后端脚本重定向某人。您需要在$ .ajax()成功回调中返回要重定向到的URL(或通过js确定)。
所以:
header('location:' . URL . 'user/profile');
}
else
{
header('location:' . URL . 'home/alogin');
}
应该是:
echo json_encode( array( 'redirect' => 'location:' . URL . 'user/profile' ) );
}
else
{
echo json_encode( array( 'redirect' => 'location:' . URL . 'home/alogin' ) );
}
然后,在成功回调中使用data参数:
$.ajax({
//...
success: function(data){
if( data.redirect ){
window.location = data.redirect;
}
}
});
答案 1 :(得分:0)
使用ajax时,通常使用回调函数。你没有重定向的共鸣很可能是你的ajax调用所回答的答案永远不会作为重定向处理。
你应该做什么而不是重定向到
header('location:' . URL . 'user/profile');
使用javascript回调函数简单地返回url并重定向:
$.ajax(
{
type:"POST",
url:"user/login",
data:{email : email, password : password},
cache:false,
success:function(data)
{
window.location = data
}
})
如果仍然失败则安装firebug或chrome。按Inspect元素以显示Web开发控制台按Net或网络选项卡。然后按下登录按钮,如果您获得成功的http请求,请选择。