php脚本中的header()不起作用

时间:2018-02-03 16:46:40

标签: javascript php jquery ajax

所以,我有一个js代码使用ajax调用后端php脚本。 ajax的唯一目的是将数据(用户名和密码)发送到所述php脚本。然后php脚本将在SQL服务器上查询此数据,并在成功时重定向到dashboard.html,或者向初始ajax请求发送错误消息。

然而,这不是发生的事情,我无法找到错误的根源。所以我尝试了一些控制台日志记录,发现我的SQL是正确的,而ajax成功函数确实得到了" Login Successful"如果我删除header()行,则回显。但是在php脚本中有header()行,ajax没有数据答案,也没有重定向到dashboard.html。是否有一些我缺失的概念?



var uname;
var pass;

$(document).ready(function() {
  $("#search_button").on("click", function() {
    uname = $("#username").val();
    pass = $("#password").val();

    if (uname == '' | pass == '') {
      $("#error_div").empty();
      $("#error_div").append('<p> Field cant be blank </p>');
      return;
    }

    $.ajax({
      url: 'back-end/login-script.php',
      data: ({
        'uname': uname,
        'pass': pass
      }),
      method: 'POST',
      success: function(data) {
        console.log(data);
        $("#error_div").empty();
        $("#error_div").append('<p>' + data + '</p>');
      }
    });

  });
});
&#13;
<?php
    $host = "localhost";
    $db_name = "pwd_lkr_db";
    $tbl_name = "user";
    $username = $password = $_SESSION["errMsg"] = "";

    session_start();

    $username = $_POST["uname"];
    $password = $_POST["pass"];

    if(!empty($username) && !empty($password)) {
        //header("location: welcome.php");
        $connection = mysql_connect("localhost", "root", "");
        $db = mysql_select_db($db_name, $connection);
        $query = mysql_query("SELECT * FROM user WHERE password='$password' AND username='$username'", $connection);
        $rows = mysql_num_rows($query);
        if($rows == 1) {
            $_SESSION["sid"] = $username;
            echo "Login Successful";
            header("Location: dashboard.html");
            exit(); 
        } else {
            $_SESSION['errMsg'] = "Username or Password is not valid";
            echo $_SESSION['errMsg'];
            session_destroy();
        }

    } else {
        die("Username and Password are required!");
    }

?>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:5)

使用header()之前无法输出文本。在将任何内容发送回浏览器之前,需要调用Header()。此外,header()重定向将无法像您执行AJAX调用那样工作。重定向应该在客户端处理,通过返回文本响应(JSON最好......),告诉javascript登录正常,并提供重定向uri。