ajax函数返回数据的问题

问题描述 投票:-1回答:1

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

javascript jquery ajax
1个回答
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时,它就是“完全不同的东西”。

如果你期望一种类型的数据(string,int,float,Object),你必须在使用它之前检查它的类型(或尝试将它转换为该类型,并处理错误)。 ==和!=不检查类型,===和!==确实。

你可以看到类型,如果你console.log(data):如果在控制台中你看到“0”,那么它是一个string,如果它是一个普通的0,那么它是一个int

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

© www.soinside.com 2019 - 2024. All rights reserved.