这是我登录控制器的核心脚本,这意味着用户的所有清理和验证都已完成。
LoginController.php中的代码
if ( password_verify($valid['pass'], $pass) ) {
// My session stuffs
header('Content-Type: application/json');
echo json_encode (array(
'result' => 'success',
'msg' => 'Login successful..! You will be redirected in a moment'
));
redirect('user/profile'); //Ajax redirect only works when I remove this.
exit;
}
login.php中的代码
try {
LoginController::UserLogin(); // Calling my method inside my controller
} catch (Exception $e) {
echo json_encode(array(
'error' => array(
'msg' => $e->getMessage()
),
), JSON_PRETTY_PRINT);
header('Content-Type: application/json');
exit;
}
<form id="login_form" action="<?php echo htmlspecialchars(pathinfo($_SERVER['PHP_SELF'], PATHINFO_FILENAME)); ?>" class="form" method="POST">
<div class="form-group">
<input type="text" name="login_username" placeholder="Enter username" class="form-control" />
</div>
<div class="form-group">
<input type="password" name="login_pass" placeholder="Enter password" class="form-control" />
</div>
<div class="form-group">
<input type="text" name="login_security" placeholder="Enter Security 25 * 2" class="form-control" />
</div>
<button class="btn btn-green" id="login-btn">Login</button>
</form>
我的ajax部分
$('#login_form #login-btn').on('click', function (e) {
e.preventDefault();
$.ajax({
url : $('#login_form').attr('action'),
type: 'POST',
dataType: 'json',
data: $('#login_form').serialize(),
success: function(data) {
console.log(data);
if (data.error) {
$('.error').html('<div class="alert alert-danger">' + data.error.msg + '</div>');
}
if ( data.result === 'success' ) {
$('.error').html('<div class="alert alert-unknown">' + data.msg + '</div>');
setTimeout('window.location.href = "user/profile.php";',3000);
}
}
});
});
我的问题:一切正常,直到我使用ajax。这意味着没有Ajax的页面显示错误,一切都很好。但是当我使用ajax时会返回错误,但是当登录详细信息正确时(有效详细信息)页面会被卡住(页面未被重定向)。
当我检查开发者控制台时,我看到的是302用于登录页面并且没有进行重定向(但是当我从Login控制器表单中删除标题时,这会导致当用户没有JavaScript时没有重定向禁用)。
答案 0 :(得分:0)
试试这个,看它是否有效:
在LoginController.php中:删除redirect
部分之后的echo
。
在Login.php中,将header
放在echo
部分之前。
在Ajax部分中,像这样使用success
部分:
success: function(data) {
console.log(data);
if (data.error) {
$('.error').html('<div class="alert alert-danger">' + data.error.msg + '</div>');
}
if ( data.result === 'success' ) {
$('.error').html('<div class="alert alert-unknown">' + data.msg + '</div>');
// -> here
// correct setTimeout function
setTimeout(function(){
window.location = "user/profile.php";
},3000);
}
}