我的登录表单有一个模态。我使用Ajax提交登录表单。如果用户名和密码无效,我会显示一条消息,通知用户有关失败的信息 但如果登录数据有效,我想将用户重定向到dashboard.php 这是我在php文件中写的响应:
$action = $_GET['action'];
if($action=="checkLogin")
{
$result = check_login();
if($result=="failure")
{
echo "login failed";
}
else
{
echo 'success
<script>
window.location = "dashboard.php";
</script>
';
}
}
但它没有按照我的预期运作。 &#34;失效&#34;和&#34;成功&#34;显示,但成功时不会发生重定向 请帮帮我,我错了吗? 提前致谢
答案 0 :(得分:2)
您的PHP无法控制客户端从AJAX响应中执行的操作;它无法设置标头或重定向客户端。相反,您需要返回适当的成功或失败HTTP状态代码并基于此重定向。 200
状态表示成功,401
表示未经授权。 Click here了解有关HTTP状态代码的详情。
在PHP中,可以通过多种方式设置响应代码,具体取决于您的版本。下面的示例是最简单的方法,应该在PHP4中工作,但Click here有更多方法可以设置它们。
if($result == "failure") {
header("HTTP/1.1 401 Unauthorized");
echo "failure";
}
else {
header("HTTP/1.1 200 OK");
echo "success";
}
然后,您可以在javascript客户端中捕获这些状态代码,并在登录成功时重定向。如果您使用的是JQuery,它可能看起来像这样:
$.ajax("example.php")
.done(function() {
// done() is called on any 200 response codes (200, 201, etc)
window.location = "dashboard.php";
})
.fail(function() {
// fail() is called on any 400 or 500 response codes (400, 401, 404, 500, etc)
alert("error");
});
值得注意的是,由于状态代码,您不需要在javascript中检查“成功”或“失败”字样的响应正文。浏览器和其他客户端已经设计为优雅地处理HTTP响应代码,因此尽可能使用它们。
答案 1 :(得分:0)
试试这个:
else
{
header('location:your_location.php');
}
或者如果你使用ajax而不是从这里返回false或其他东西,为此把它放在js中:
window.location.href = "your_location";
答案 2 :(得分:0)
这是我为重定向页面所做的工作:
else{
echo "<meta charset='utf-8'/>";
//direct after five seconds
echo "<meta content='5; url=http://".$_SERVER['HTTP_HOST']."/dashboard.php"."' http-equiv='refresh'> ";
}
我的想法是你不需要'成功'作为回应, 如果登录有效,只需重定向页面即可。 如果失败,那么,请告诉我们echo“login failed”;
答案 3 :(得分:0)
如果您可以使用success: function(data){
if(data == "success")
window.location.redirect("path.php");
}
重定向,则可以执行此操作:
{{1}}
您的代码的问题是您从ajax调用它。意思是代码最有可能返回文本。不是HTML或JavaScript。如果这是回到HTML页面,确定它打印“脚本”部分,你的js将运行。但在这里,你必须做这样的事情:
在你的ajax回调中('成功'或'然后'。无论你使用哪个):
{{1}}