Javascript ajax函数返回数据的问题
我正在检查数据库中是否已经有用户名。我使用了一个ajax函数。如果未使用用户名,则返回的数据应等于0;如果使用用户名,则返回的数据应等于1。我在数据中添加了一个条件,用一个简单的警报来显示这两种情况,但问题是,即使数据库中不存在用户名,代码也只执行第一个条件。我不明白为什么当数据等于0时它不执行第二个条件 Javascript:Javascript ajax函数返回数据的问题,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在检查数据库中是否已经有用户名。我使用了一个ajax函数。如果未使用用户名,则返回的数据应等于0;如果使用用户名,则返回的数据应等于1。我在数据中添加了一个条件,用一个简单的警报来显示这两种情况,但问题是,即使数据库中不存在用户名,代码也只执行第一个条件。我不明白为什么当数据等于0时它不执行第二个条件 Javascript: function validarusuario() { var Pseudo = $('#Pseudo').val(); $.ajax({ url: '
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');
}
}
});
}
if (!$stmt->execute()) {
$sBody .= 'errorr<br />';
} else {
$iNbResult = $stmt->rowCount();
echo "$iNbResult";
}
PHP:
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');
}
}
});
}
if (!$stmt->execute()) {
$sBody .= 'errorr<br />';
} else {
$iNbResult = $stmt->rowCount();
echo "$iNbResult";
}
if(!$stmt->execute()){
$sBody.='error
';
}否则{
$iNbResult=$stmt->rowCount();
回显“$INBREALT”;
}
当我输入警报(数据)时,我可以看到数据何时等于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”,则它是一个字符串
,如果它是一个普通的0,则它是一个int
我希望这有助于您解决问题。评论不用于长时间讨论;这段对话已经结束。如果你有关于如何解决问题的建议,请发布答案。对澄清问题的补充信息和回答应放在问题本身中,而不是放在评论中。从
echo“$iNbResult”中删除引号”
应该是这样的echo$iNbResult代码>我尝试了您的代码,但即使我使用的用户名在数据库中不存在,它也只显示“Username ready take”。您可以将“!==0”修改为“==1”,并在控制台的末尾添加默认的“else”分支。记录实际值。如果这不起作用,而且您仍然不知道为什么,我建议您在问题描述中添加处理AJAX调用的代码。