【发布时间】:2013-09-22 07:36:35
【问题描述】:
在新用户注册表单上,我有一个非常简单的功能,就是检查数据库中是否存在用户名。不幸的是,声明的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,但当它为真时没有记录任何内容。
将if(data) 更新为if(data!="false")。问题依然存在。
更新
问题不是我想的那样。看起来脚本 正在 正常触发,但它仅在输入值为 4 个字符或更少且我一直在测试它的用户名是 6 个字符时才执行 .keyup。前 4 个字符返回的数据保持不变。
所以现在看起来问题实际上是它不会运行.get(),除非该值是 4 个字符或更少。我正在调查 php 中可能导致此问题的原因。
【问题讨论】:
-
console.log(data)显示什么? -
当它为假时显示“假”,当它为真时什么也不显示。我把它放在
var inp行的正下方 -
你能把你的 php 改成 echo
true,否则改成已经工作的false? -
php 已经根据数据库中该用户名的存在说真或假。也许我误解了你的意思。
-
“当它为真时没有记录” - 你是说记录了一个空字符串,还是什么也没发生(暗示某种错误)。您确定回调函数实际上是针对真实情况调用的吗?
标签: javascript php jquery get