在新用户注册表上,我有一个非常简单的功能,只是为了检查数据库中是否存在用户名。不幸的是,语句的else
部分不起作用。PHP 文件工作正常,并按预期返回 true
或 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 正在检查用户名的可用性。然后,带有 ID "namecheck" 的 <span>
标记将更改以告诉用户发生了什么。现在,我可以将if(data)
更改为if(!data)
,它将按照该更改的预期运行。如上所述,我可以在应该发生的时候发生$('#namecheck').html('✓')
,但永远不会发生$('#namecheck').html('This username is already taken')
的第二部分。
为什么我的else
线路从未被调用?我浪费了太多时间试图自己解决这个问题,所以现在我向你们寻求一些帮助,以找出出了什么问题。
编辑:如果console.log(data)
在那里,控制台会在 false
为 false 时返回,但在为 true 时不会记录任何内容。
将if(data)
更新为 if(data!="false")
。问题依然存在。
更新问题并不完全是我想象的那样。看起来脚本正在按预期触发,除了它仅在输入值为 4 个字符或更少时才.keyup
,并且我一直在测试它的用户名是 6 个字母。为前 4 个字符返回的数据保持不变。
所以现在看起来问题实际上是它不会运行.get()
除非值为 4 个字符或更少。我正在研究可能导致 php 中出现此问题的原因。
(数据)将始终是一个真实值,因为它是一个字符串
更改为
if (data=="true") ...
如果 true 返回空(不是一个聪明的想法),请尝试
if (data!="false") ...
现场演示
你会以布尔或简单的字符串格式返回true/false,所以Javascript不会理解这一点。
为此,您应该制定这样的条件。
if( data === true || data === "true" || data === 1 || data === "1" )
{
// Do something here
}
else
{
// Do something else
}