我正在尝试检查我的用户名是否可以通过使用jQuery注册,该脚本实际上没有错误,但即使数据库中没有用户名记录,它也会保持" the username in use "
。< / p>
这是我的功能的PHP代码
function checkavailabileUserName($UserName) {
if(isSet($_POST['userName']))
{
$username = $_POST['userName'];
$sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName='$username'") or die(mysql_error());
if(mysql_num_rows($sql_check))
{
echo '<font color="red">The username <STRONG>'.$username.'</STRONG> is already in use.</font>';
}
else
{
echo 'OK';
}
}
}
我在这个名为RegisterUserAction.php
的页面上调用此函数
checkavailabileUserName($UserName);
这是JAVASCRIPT代码
pic1 = new Image(16, 16);
pic1.src = "loader.gif";
$(document).ready(function(){
$("#userName").change(function() {
var usr = $("#userName").val();
if(usr.length >= 3)
{
$("#status").html('<img src="loader.gif" align="absmiddle"> Checking availability...');
$.ajax({
type: "POST",
url: "RegisterUserAction.php",
data: "userName="+ usr,
success: function(msg){
$("#status").ajaxComplete(function(event, request, settings){
if(msg == 'OK')
{
$("#userName").removeClass('object_error'); // if necessary
$("#userName").addClass("object_ok");
$(this).html(' <img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font> ');
}
else
{
$("#userName").removeClass('object_ok'); // if necessary
$("#userName").addClass("object_error");
$(this).html(msg);
}
});
}
});
}
else
{
$("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>');
$("#userName").removeClass('object_ok'); // if necessary
$("#userName").addClass("object_error");
}
});
});
最后,这里是字段的HTML代码
<td><label for="userName"></label>
<input type="text" name="userName" id="userName" onkeyup="twitter.updateUrl(this.value)" class="inn" />
<div id="status"></div>
<script type="text/javascript">
$( function () {
twitter.screenNameKeyUp();
$('#user_screen_name').focus();
});</script>
我哪里出错?
答案 0 :(得分:2)
您的代码中存在错误。您使用$ UserName作为函数checkavailabileUserName的参数,但您没有将该参数传递给函数。这会导致错误,因此只有您收到消息“用户名在使用中”。
从函数中移除$ UserName参数,代码将完美运行。
如果您可以使代码更干净整洁并且可以使用jquery ajax调用和PHP代码,那将会很好:
Jquery Ajax Call
jQuery(document).ready(function(){
jQuery("#userName").change(function() {
jQuery("#status").empty();
var usr = jQuery("#userName").val();
if(usr.length >= 3)
{
jQuery("#status").html('<img src="loader.gif" align="absmiddle"> Checking availability...');
jQuery.ajax({
type: "POST",
url: "RegisterUserAction.php" ,
data: "userName="+ usr,
success: function(response){
if(response)
{
jQuery('#status').html('<img src="accepted.png" align="absmiddle"> <font color="Green"> Available </font>');
return true;
}
else
{
jQuery('#status').html('<font color="red">The username <STRONG>'+usr+'</STRONG> is already in use.</font>');
return false;
}
}
});
}
else
{
jQuery("#status").html('<font color="red">The username should have at least <strong>3</strong> characters.</font>');
return false;
}
});
});
PHP代码:
function checkavailabileUserName($checkavailabileUserName)
{
if(isset($_POST['userName']))
{
$username = $_POST['userName'];
$sql_check = mysql_query("SELECT userUserName FROM user WHERE userUserName ='$username'") or die(mysql_error());
if(mysql_num_rows($sql_check)>0)
{
echo false;
}
else
{
echo true;
}
}
else
{
echo false;
}
}
答案 1 :(得分:1)
首先,您应该使用Firebug for FF或Chrome / IE开发人员工具,具体取决于您选择的浏览器(按F12)。看看控制台,看看AJAX的帖子是什么样的。确保它正确发布并且您具有实际值。通常我会这样做我的jQuery AJAX:
$.ajax({
type: "POST",
url: "RegisterUserAction.php",
data: {
userName: usr
},
dataType: "json",
success: function(data) {
if(data.success == 'true'){
//do something
} else {
//do something
}
}
});
然后在PHP页面上,我发送我的json编码回调,如下所示:
if (mysql_num_rows($sql_check)>0) {
//do something
$return_arr["success"] = 'true';
} else {
//do something
$return_arr["success"] = 'false';
}
echo json_encode($return_arr);
尝试修改您的AJAX以在我的示例中使用数据方法和dataType,看看是否有帮助。看一下Firebug / Dev工具控制台。价值是否会超过?如果是这样,那么PHP方面可能有问题。让我知道它是怎么回事,如果它是PHP部分我们可以进一步研究(尽管现在看起来很好)。
答案 2 :(得分:0)
我认为这一行:
data: "userName="+ usr,
根据jQuery规范,数据应该以这种格式传递
{ "userName": usr}
所以你可能根本不发送任何POST数据,而且你没有进入
if(isSet($_POST['userName'])){
并且如果空(不是'OK')则发送消息,这就是您获得答案的原因"the username in use"