3

在新用户注册表单上,我有一个真正简单的功能,就是检查数据库中是否存在用户名。不幸的是,else声明的一部分不起作用。PHP 文件工作正常,并按预期返回trueor 。false这是jQuery:

$('#username').keyup(function() {
        var inp = $('#username').val();
        $.get('register-check-username.php', { username: inp }, function(data) {
            if(data!="false") {
                $('#namecheck').html('✓');
            } else {
                $('#namecheck').html('This username is already taken');
            }
         });
    }); 

如果不清楚,username是文本输入的 id。当它改变时,php 正在检查用户名的可用性。然后一个<span>id 为“namecheck”的标签将更改以告诉用户发生了什么。现在,我可以更改if(data)if(!data),并且它将按照该更改的预期运行。如上所述,我可以$('#namecheck').html('✓')在应该发生的时候发生,但永远不会发生$('#namecheck').html('This username is already taken').

为什么我的else线路从来没有被调用?我已经浪费了太多时间试图自己解决这个问题,所以现在我请求大家帮助找出问题所在。

编辑:console.log(data)在那里,控制台false在它为假时返回,但当它为真时没有记录任何内容。

更新if(data)if(data!="false"). 问题依然存在。

更新 问题不是我想的那样。看起来脚本正在按应有的方式触发,除了它仅.keyup在输入值为 4 个字符或更少并且我一直在测试它的用户名是 6 个字母时才会触发。前 4 个字符返回的数据保持不变。

所以现在看起来问题实际上是它不会运行.get(),除非值是 4 个字符或更少。我正在调查 php.ini 中可能导致这种情况的原因。

4

2 回答 2

4

(data) 将始终是一个真实值,因为它是一个字符串

改成

if (data=="true") ...

如果 true 返回空(不是一个聪明的主意),请尝试

if (data!="false") ...

Live Demo

于 2013-09-22T07:39:42.897 回答
1

有时发生的事情会以布尔值或简单字符串格式返回真/假,因此 Javascript 无法理解。

为此,您应该做出这样的条件。

if( data === true || data === "true" || data === 1 || data === "1" )
{
 // Do something here
}
else
{
 // Do something else
}
于 2013-09-27T04:39:56.720 回答