javascript重定向在ajax响应中

时间:2016-08-12 05:42:36

标签: javascript ajax redirect

我的登录表单有一个模态。我使用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;显示,但成功时不会发生重定向 请帮帮我,我错了吗? 提前致谢

4 个答案:

答案 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}}