我正在尝试检查数据库中是否已经使用了用户名。我使用了ajax函数。如果未采用用户名,则返回的数据应等于0,如果采用,则返回等于1。我给数据添加了一个条件来显示两个带有简单警报的情况,但问题是代码只执行第一个条件,即使数据库中不存在用户名。我不明白为什么当数据等于0时它不执行第二个条件。
使用Javascript:
function validarusuario() {
var Pseudo = $('#Pseudo').val();
$.ajax({
url: 'Bienvenu.php',
method: "POST",
data: {
Pseudo: Pseudo
},
success: function(data) {
if (data != 0) {
alert('Username already taken');
} else if (data == 0) {
alert('Username not taken');
}
}
});
}
PHP:
if (!$stmt->execute()) {
$sBody .= 'errorr<br />';
} else {
$iNbResult = $stmt->rowCount();
echo "$iNbResult";
}
当我放alert(data)
时,我可以看到数据等于0或另一个值,那么为什么如果我将数据置于if条件下它不起作用?
不检查类型可能会导致您的问题:
function validarusuario() {
var Pseudo = $('#Pseudo').val();
$.ajax({
url: 'Bienvenu.php',
method: "POST",
data: {
'Pseudo': Pseudo
},
success: function(data) {
// '==' accepts anything that is not 0 (integer). Zero can be represented by a
// '0' (string), and in that case '0' != 0 evaluates to TRUE, so the first
// branch of your if-else is executed.
if (parseInt(data, 10) !== 0) {
alert('Username already taken');
} else if (parseInt(data, 10) === 0) {
alert('Username not taken');
}
}
})
}
在你的警告框中,0(整数)和0(字符串)之间没有区别 - 至少你没有看到差异。但是当涉及到JS时,它就是“完全不同的东西”。
如果你期望一种类型的数据(string,int,float,Object),你必须在使用它之前检查它的类型(或尝试将它转换为该类型,并处理错误)。 ==和!=不检查类型,===和!==确实。
你可以看到类型,如果你console.log(data)
:如果在控制台中你看到“0”,那么它是一个string
,如果它是一个普通的0,那么它是一个int
。
我希望这可以帮助您解决问题。