Javascript ajax函数返回数据的问题

Javascript ajax函数返回数据的问题,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在检查数据库中是否已经有用户名。我使用了一个ajax函数。如果未使用用户名,则返回的数据应等于0;如果使用用户名,则返回的数据应等于1。我在数据中添加了一个条件,用一个简单的警报来显示这两种情况,但问题是,即使数据库中不存在用户名,代码也只执行第一个条件。我不明白为什么当数据等于0时它不执行第二个条件 Javascript: function validarusuario() { var Pseudo = $('#Pseudo').val(); $.ajax({ url: '

我正在检查数据库中是否已经有用户名。我使用了一个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');
      }
    }
  });
}
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调用的代码。