您好,我是刚开始使用AJAX和jquery并尝试创建登录系统,但是当我尝试登录时成功创建了$ _SESSION,但无法重定向到下一页,我尝试使用window.location.replace,但是它似乎没有用。我一直在寻找答案,但似乎都没有用。希望有人能帮助我。
php
try {
// sql here
$sql = ("SELECT * FROM users WHERE username = :username");
$stmt = $db->connection->prepare($sql);
$stmt->execute(array(
':username' => $form_USERNAME
));
$row=$stmt->fetch(PDO::FETCH_ASSOC);
//check if username is existing in database
if($form_USERNAME == $row['username']){
if(password_verify($form_PASSWORD, $row['user_pass'])){
session_start();
$_SESSION['loggedin'] = true;
$_SESSION['userid'] = $row['user_id'];
$_SESSION['username'] = $row['username'];
$_SESSION['usertype'] = $row['user_type'];
echo json_encode(array('result' => 'ok'));
}
else{
echo json_encode(array(
'error' => array(
'msg' => 'Invalid Username or password'
),
));
}
}
else{
echo json_encode(array(
'error' => array(
'msg' => 'User not found'
),
));
}
} catch (Exception $e) {
echo json_encode(array(
'error' => array(
'msg' => $e->getMessage(),
'code' => $e->getCode(),
),
));
}
?>
jquery
<script>
$(function () {
$('#frmLogin').on('submit', function (e) {
e.preventDefault();
var FormData = $('#frmLogin').serialize();
$.ajax({
type: 'post',
url: '../forms/login.php',
data: FormData,
dataType: 'json',
encode: true,
beforeSend: function () {
$('#frmBtnLogin').text("Logging in");
},
success: function (data) {
if (data.error) {
$('#frmLoginUsername').text('');
alert(data.error.msg);
} else {
alert(data.result);
}
$('#frmBtnLogin').text("Log in");
}
});
});
});
所以我尝试在网上搜索答案,并尝试了一些方法,但仍然无法正常工作
更新jquery
<script>
$(function () {
$('#frmLogin').on('submit', function (e) {
e.preventDefault();
var FormData = $('#frmLogin').serialize();
$.ajax({
type: 'post',
url: '../forms/login.php',
data: FormData,
dataType: 'json',
encode: true,
beforeSend: function () {
$('#frmBtnLogin').text("Logging in");
},
success: function (data) {
if(data.result == "ok"){
window.location.replace("user-home.php");
}
else if (data.error) {
$('#frmLoginUsername').text('');
alert(data.error.msg);
$('#frmBtnLogin').text("Log in");
}
}
});
});
});
答案 0 :(得分:1)
使用AJAX与服务器通信时,服务器无法将用户重定向到适当的页面。您的前端将只接收最终重定向的响应数据。
如果您未使用AJAX ,则可以将类似以下内容的内容附加到您的php脚本中:
header('Location: https://my.page/to/redirect/to.php');
但是由于您使用的是AJAX,因此您的前端将只接收重定向提供的数据,就像正常响应一样。
相反,请考虑让您的AJAX实现评估HTTP响应状态:
// Your PHP script
try {
// check validity
http_response_code(200); // OK response status
echo $response;
} catch (\Throwable $exception) {
// handle error
http_response_code(401); // Not OK response status
echo $response;
}
然后让您的前端检查响应中的http状态代码,以决定下一步要做什么。
例如:
// when handling the asynchronous reponse in Javascript
if (xhr.status === 200) {
// redirect to successful login page
window.location.href = 'https://my.page/succesful-login';
} else {
// redirect to invalid login page
window.location.href = 'https://my.page/invalid-login';
}