Ajax函数返回的数据有问题

时间:2019-04-12 23:41:39

标签: javascript jquery ajax

我正在尝试检查数据库中是否已经使用了用户名。我使用了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条件,为什么它不起作用?

1 个答案:

答案 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

我希望这可以帮助您解决问题。