从PHP发出JQuery AJAX请求后重定向

时间:2015-10-28 21:20:32

标签: javascript php jquery ajax

因此,当单击登录按钮时,如果登录成功与否,我使用JQuery POST方法从login.php获取数据。如果它不是(没有找到用户),那么它会正确显示该消息。

但是当我想重定向用户(用户存在)时,它会将整个网页打印到那个DIV中。

按下JQuery按钮后:

$(function(){

$("#login-form").submit(function() {
    event.preventDefault();

    var name = $('#inputName').val();
    var password = $('#inputPassword').val();

    $.post("login.php", 
    {
        name: name,
        password: password
    },
    function(data)
    {
        $("#resultDiv").hide().html(data).fadeIn(1000).effect( "shake", {direction:"up",times:2, distance:10}, 750 );
    });
});
});

如果登录失败,则会显示。但是,当我想重定向时,doesen工作:

if(!$row) {
echo '<div class="alert alert-danger" style="margin-top:25px; margin-bottom: 0px; text-align:center;">Invalid <strong>username</strong> or <strong>password</strong>.</div>';
} else {

  $line = mysqli_fetch_assoc($query);

  $_SESSION['IP'] = $line["IP"];
  $_SESSION['ID'] = $line["ID"];
  $_SESSION['username'] = $username;

  header("location:choose.php");
}

因此,当用户登录时,我该如何重定向他?不想展示任何东西。

1 个答案:

答案 0 :(得分:1)

您的登录脚本不会以您拥有的方式重定向整个页面,它只是重定向AJAX请求,因此整个页面最终都会出现在resultDiv中。

您的成功函数应该在将数据应用于resultDiv html()之前查看返回的数据。

我发现登录响应更容易成为JSON数据集,这使得抓取更容易:

if(data.loggedIn==true) {
  window.location = data.location;
} else {}

您还可以将resultDiv保留为错误,它只是:

$("#resultDiv").hide().html(data.errorMsg)...

对于php方面:

if(!$row) {
  echo '{loggedIn:false,errorMsg:"<div class=\"alert alert-danger\" style=\"margin-top:25px; margin-bottom: 0px; text-align:center;\">Invalid <strong>username</strong> or <strong>password</strong>.</div>"}';
} else {

  $line = mysqli_fetch_assoc($query);

  $_SESSION['IP'] = $line["IP"];
  $_SESSION['ID'] = $line["ID"];
  $_SESSION['username'] = $username;

  echo '{loggedIn:true,location:"choose.php"}';

}

我希望这对你有用。