【问题标题】:javascript redirect in ajax responseajax响应中的javascript重定向
【发布时间】:2016-12-19 00:58:36
【问题描述】:

我的登录表单有一个模式。我使用 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>
        ';

    }
}

但它并没有像我预期的那样工作。显示“失败”和“成功”,但在成功的情况下不会发生重定向 请帮助我,我错了吗? 提前致谢

【问题讨论】:

标签: javascript ajax redirect


【解决方案1】:

您的 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 响应代码,因此请尽可能使用它们。

【讨论】:

  • 感谢您提供信息丰富的回复。请在下面查看我的帖子。我还是有问题。谢谢
【解决方案2】:

这是我为重定向页面所做的:

else{

    echo "<meta charset='utf-8'/>";
    //direct after five seconds 
    echo "<meta content='5; url=http://".$_SERVER['HTTP_HOST']."/dashboard.php"."' http-equiv='refresh'> ";

}

我的想法是你不需要“成功”作为回应, 如果登录有效,只需重定向页面。 如果失败,OK,通过 echo "login failed" 告诉我们;

【讨论】:

  • 这是一个元重定向,不能通过 AJAX 调用工作,因为这些元标记都不会被注入到客户端的页面中。
  • 当他的登录有效时,我认为他不需要得到响应~~
  • 但是你的做法更优雅=)
【解决方案3】:

试试这个:

else
{
    header('location:your_location.php');
}

或者如果你使用的是 ajax 而不是从这里返回 false 或其他东西,为此将它放在 js 中:

window.location.href = "your_location";

【讨论】:

  • OP 明确表示他们正在使用 AJAX。
【解决方案4】:

如果您可以使用php 进行重定向,您可以这样做:

header('location : your_php_page.php');

您的代码的问题在于您是从 ajax 调用它。意味着代码很可能是返回文本。不是 html 或 javascript。如果这返回到 HTML 页面,请确保它会打印“脚本”部分并且您的 js 会运行。但是在这里,您必须执行以下操作:

在您的 ajax 回调中('success' 或 'then'。无论您使用哪个):

success: function(data){
    if(data == "success")
        window.location.redirect("path.php");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-23
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多