所以,我有一个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;
答案 0 :(得分:5)
使用header()之前无法输出文本。在将任何内容发送回浏览器之前,需要调用Header()。此外,header()重定向将无法像您执行AJAX调用那样工作。重定向应该在客户端处理,通过返回文本响应(JSON最好......),告诉javascript登录正常,并提供重定向uri。