JQuery字符串比较返回不正确的值?

时间:2015-06-17 14:44:36

标签: javascript php ajax

我正在通过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,这让我更加困惑。

有人可以帮我解释一下吗?

2 个答案:

答案 0 :(得分:1)

此问题的典型原因是响应包含空格字符。它们在控制台中不一定是显而易见的,但检查response.length是一种简单易懂的方法。

请注意,<?php ... ?>分隔符以外的任何内容,以及空格字符(例如换行符)都将包含在回复中。

防止尾随空格字符的典型方法是根本没有结束?>

虽然您可以在比较之前简单地"trim" the response,但更好的解决方案是修复服务器端脚本以真正发送您要发送的内容。

答案 1 :(得分:0)

严格相等运算符比较值和数据类型。例如,如果将零作为字符串进行比较,将零作为数字进行比较,则返回false。所以这就是你看错的原因。当您使用“严格相等”(===)时,请确保比较具有相同类型和数据的2个对象,否则使用简单的等式运算符(==)。