我正在通过AJAX向PHP脚本发送帖子请求,如下所示:
$.post("login.php", {u: username,p: password})
.done(function(response){
console.debug(response);
if (response === "0") {
$("#loginMessage").html("Invalid Username or Password");
} else {
$.mobile.changePage("#homePage");
}
})
和login.php
摘要。如果登录凭证失败,我回复"0"
。我相信这会输出一个字符串,因为它是引号,而不是echo 0;
if ($stmt->num_rows > 0 && password_verify($password,$hashedPassword)) {
$_SESSION["uid"] = $uid;
} else {
echo "0";
}
但是,当我输入无效凭据时,比较response === "0"
正在返回FALSE
,但是当我使用console.debug(response)
时,它显示它确实是0
。
经过我自己的一些小事,我发现如果我将response === "0"
更改为response == 0
,它会正确评估为true
。
response === 0
也评估为FALSE
,这让我更加困惑。
有人可以帮我解释一下吗?
答案 0 :(得分:1)
此问题的典型原因是响应包含空格字符。它们在控制台中不一定是显而易见的,但检查response.length
是一种简单易懂的方法。
请注意,<?php ... ?>
分隔符以外的任何内容,以及空格字符(例如换行符)都将包含在回复中。
防止尾随空格字符的典型方法是根本没有结束?>
。
虽然您可以在比较之前简单地"trim" the response,但更好的解决方案是修复服务器端脚本以真正发送您要发送的内容。
答案 1 :(得分:0)
严格相等运算符比较值和数据类型。例如,如果将零作为字符串进行比较,将零作为数字进行比较,则返回false。所以这就是你看错的原因。当您使用“严格相等”(===)时,请确保比较具有相同类型和数据的2个对象,否则使用简单的等式运算符(==)。