你好我在提交表单后遇到重定向问题。 我使用简单的ajax表单在div中显示登录错误。
$(document).ready(function(){
$('#formlogin').on('submit', function (e) {
$.ajax({
type: 'POST',
url: 'login.php',
data: $(this).serialize(),
success: function(data) {
$('div#ack').empty().append(data);
}
});
e.preventDefault();
});
问题是提交成功后它没有重定向到" logged_in.php"
这是php登录。
if (empty($username) === true || empty ($password) === true) {
$errors [] = 'Please enter both username and password!';
} else if (user_exists($username) === false) {
$errors [] = 'We can not find the name. Have you registered?';
} else {
$login = login($username, $password);
if ($login === false) {
$errors [] = 'This user name or password is incorrect.';
} else {
$_SESSION['user_id'] = $login;
header('Location: logged_in.php');
exit();
}
}
答案 0 :(得分:5)
如果您重定向使用AJAX调用的页面,则不重定向父页面。
您应该做的是回应标识用户已成功登录的内容。
可能代替header('Location: logged_in.php');
你放了:
echo "success";
然后,在你的成功函数中:
success: function(data) {
if (data == "success")
window.location = "logged_in.php";
else
alert("Wrong password.");
}
请注意,ajax中的success
并不意味着您已成功登录,只是意味着返回的页面请求没有错误(500)。您仍需要确定要对数据执行的操作。
答案 1 :(得分:0)
这里有两件不同的事情。
1 - 您的AJAX功能。 它位于以异步方式调用服务器的页面上
2 - 您的登录页面。 它由包含AJAX的页面调用
第二页中的代码发生在服务器中,而您的AJAX
代码正在您的客户端中发生。
您应该在php登录页面中返回成功消息,然后在成功回调中检查消息是否正确,这意味着用户已成功登录。检查消息是否正确后,您可以从成功回调中重定向用户,执行以下操作:
location.href = "yourUrl"
答案 2 :(得分:0)
下面的一些生产代码对我来说非常有用,提交表单然后重定向。
$.ajax({
url: "QuoteReload.php",
type: 'GET',
data: 'batchid=' + bid + '&operation=archiveBatch',
success: function(response) {
// window.location.href = "EditItem.php?batchid=" + bid + ""eitemid=NEW";
$(location).attr('href', 'Quote.php?QuoteId=<?php echo $QuoteId; ?>')
},
error: function(xhr) {
$(ddl).css("background-color", "#4C25BC");
alert('Delete Batch error: ' + xhr);
}
});