返回错误值的 JQuery 字符串比较

JQuery string comparison returning incorrect value?

本文关键字:字符串 比较 JQuery 错误 返回      更新时间:2023-09-26

我通过 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 个对象,否则使用简单的相等运算符 (==)。