返回错误值的 JQuery 字符串比较
JQuery string comparison returning incorrect value?
我通过 AJAX 向 PHP 脚本发送一个 post 请求,如下所示:
$.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
,这让我更加困惑。
有人可以为我解释一下吗?
此问题的典型原因是响应包含空格字符。它们在控制台中不一定很明显,但检查response.length
是一种简单的方法。
请记住,<?php ... ?>
分隔符之外的任何内容,以及空格字符(例如换行符),都将包含在响应中。
防止尾随空格字符的典型方法是完全没有结束?>
。
虽然您可以在比较之前简单地"修剪"响应,但更好的解决方案是修复服务器端脚本,使其真正只发送您想要发送的内容。
严格相等 运算符比较值和数据类型。例如,如果将零作为字符串进行比较,将零作为数字进行比较,则返回 false。所以这就是为什么你看到错误。确保在使用"严格相等"(===)时比较具有相同类型和数据的 2 个对象,否则使用简单的相等运算符 (==)。
相关文章:
- 反向字符串比较
- ExpressJS:奇怪的字符串比较
- 宽松的字符串比较
- 在angularJS中用字符串比较检查Json对象
- 在JavaScript中使用===进行字符串比较有意义吗
- 字符串比较显示从flash[:alert]检索到的字符串上的错误
- JSLint字符串比较错误应为'==='而是看到'=='
- 字符串比较在d3.rgb中不起作用
- 为什么这个字符串比较在Jest的期望中没有失败
- jQuery this.href 字符串比较不起作用
- 字符串比较不起作用
- 字符串比较与预期不符
- Javascript中的字符串比较不起作用
- 正则表达式(字符串比较)
- j查询字符串比较变量
- 字符串比较 JavaScript 中的失败
- 当字符串中存在空格时,字符串比较会给出错误的输出
- Ant JavaScript 相同的字符串比较给出了错误的结果,但 char compare 给出了字符串中每个字符的
- 正则表达式字符串比较忽略符号
- JavaScript 中的序号字符串比较