Ajax&;PHP,responseText返回空
我已经在PHP上完成了一个用户注册和登录系统。它工作得很好,但是现在我尝试使用Ajax发送POST请求,以保持在同一页面中,并且responseText返回空。我尝试过一些类似问题的解决方案,但没有一个对我有效 这是我用来登录用户的php函数:Ajax&;PHP,responseText返回空,php,ajax,responsetext,Php,Ajax,Responsetext,我已经在PHP上完成了一个用户注册和登录系统。它工作得很好,但是现在我尝试使用Ajax发送POST请求,以保持在同一页面中,并且responseText返回空。我尝试过一些类似问题的解决方案,但没有一个对我有效 这是我用来登录用户的php函数: if(!empty($_POST)) { $query = " SELECT id, username, password,
if(!empty($_POST)) {
$query = "
SELECT
id,
username,
password,
salt,
email
FROM users
WHERE
username = ?
";
try {
$stmt = $db->prepare($query);
$stmt->bind_param("s", $_POST['username']);
$result = $stmt->execute();
}
catch(Exception $ex) {
die("Failed to execute the query");
}
// Is logged in?
$login_ok = false;
$res = $stmt->get_result();
$row = $res->fetch_assoc();
if($row) {
// Hash the submitted password and compare it whit the hashed version that is stored in the database
$check_password = hash('sha256', $_POST['password'] . $row['salt']);
for($n = 0; $n < 65536; $n++) {
$check_password = hash('sha256', $check_password . $row['salt']);
}
if($check_password === $row['password']) {
$login_ok = true;
} else {
echo "Incorrect password";
}
}
if($login_ok) {
unset($row['salt']);
unset($row['password']);
$_SESSION['user'] = $row;
echo "Logged in";
} else {
echo "Login failed";
}
}
if(!empty($\u POST)){
$query=”
挑选
身份证件
用户名,
密码,
盐,
电子邮件
来自用户
哪里
用户名=?
";
试试{
$stmt=$db->prepare($query);
$stmt->bind_param(“s”,$_POST['username']);
$result=$stmt->execute();
}
捕获(例外$ex){
die(“执行查询失败”);
}
//是否已登录?
$login\u ok=false;
$res=$stmt->get_result();
$row=$res->fetch_assoc();
如果($行){
//散列提交的密码,并将其与数据库中存储的散列版本进行比较
$check_password=hash('sha256',$_POST['password'.$row['salt']);
对于($n=0;$n<65536;$n++){
$check_password=hash('sha256',$check_password.$row['salt']);
}
如果($check_password===$row['password']){
$login\u ok=true;
}否则{
回显“密码不正确”;
}
}
如果($login_ok){
未结算($row['salt']);
未设置($row['password']);
$\会话['user']=$行;
回显“登录”;
}否则{
echo“登录失败”;
}
}
这是我的表单和Ajax函数:
<form action="" method="post">
<fieldset>
<legend>Login</legend>
<input type="text" name="username" placeholder="user" value="" />
<input type="password" name="password" placeholder="pass" value="" />
<input type="button" id="log" value="Login" onclick="log()"/>
</fieldset>
</form>
<script type="text/javascript">
function log(){
if (!window.XMLHttpRequest) return;
var url = "php/login.php",
req = new XMLHttpRequest();
req.open("POST", url);
req.send(null);
req.onreadystatechange = function(){
if(req.readyState == 4 && req.status == 200){
var response = req.responseText;
alert(response);
}
}
}
</script>
登录
函数日志(){
如果(!window.XMLHttpRequest)返回;
var url=“php/login.php”,
req=新的XMLHttpRequest();
请求打开(“POST”,url);
请求发送(空);
req.onreadystatechange=函数(){
如果(req.readyState==4&&req.status==200){
var响应=请求响应文本;
警报(响应);
}
}
}
有什么想法吗
编辑:顺便说一句,我尽量不使用jQuery。在这里添加了答案,以便它可以被接受,并且其他用户不会认为这是一个未回答的问题而点击此页面 示例代码中的问题是没有随AJAX请求发送POST数据
因此,您的第一个条件是:
if(!empty($_POST))
等于FALSE
,因此该条件中的所有代码都不会运行。看起来您在该ajax请求中没有发送任何POST数据。因此,您的第一个PHP条件不满足<代码>如果(!empty($\u POST))。尝试粘贴否则回显“无POST数据”代码>在末尾重复检查。你是对的。我从另一个请求复制了ajax代码,但忘记了放置post数据。我简直不敢相信我花了两个小时试图修好它,却没有看到--。谢谢