我正在尝试检查数据库中是否已经使用了用户名。我使用了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条件,为什么它不起作用?
答案 0 :(得分:1)
您的问题可能是由于不检查类型而引起的:
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时,它“完全不同”。
如果期望数据类型(字符串,整数,浮点数,对象),则必须在使用数据之前检查其类型(或尝试将其转换为该类型,并处理错误)。 == 和!= 不会检查类型, === 和!== 会检查类型。 / p>
您可以看到类型,如果您console.log(data)
:如果在控制台中看到“ 0” ,则它是string
,如果是普通 0 ,则为int
。
我希望这可以帮助您解决问题。