在注册表单中使用同步JAX来检查用户名可用性

时间:2012-03-25 10:19:59

标签: javascript ajax json synchronous

我有一份登记表。当我点击“提交”按钮时,它应检查是否未使用用户名并且密码是否匹配。所以我编写了一些函数:一个用于检查密码,一个用于检查用户名是否可用,另一个用于检查2个检查功能。密码检查功能很好,但我的问题是用户名检查功能。这是功能:

function checkIsUsernameExist(){
    if($("#txtNewUsername").val() == "") {
        $("#divIsUsernameExist").html("");
        return false;
    } else {
    $.getJSON("inc/API.php", 
        {
            command : 'isUsernameExist',
            username : $("#txtNewUsername").val(),
        },
        function(result)
        {
            if (result != true){
                $("#divIsUsernameExist").html("This username is available!");
                return true;
            } else {
                $("#divIsUsernameExist").html("This username is not available!");
                return false;
            }
        });
    }
}

当用户名为空时,它会返回False。但是当输入某个值时,它返回Undefined。 有人告诉我应该使用Synchronous JAX(但没告诉我怎么做),所以我试着编写这段代码:

function checkIsUsernameExistAsync(){
    if($("#txtNewUsername").val() == "") {
        $("#divIsUsernameExist").html("");
        return false;
    } else {
        $.ajax({
            type: 'POST',
            url: 'inc/API.php',
            data: ({
            command : 'isUsernameExist',
            username : $("#txtNewUsername").val(),
            cache: false,
            async: false
            }),
    success: function(result){
        if (result != true){
                $("#divIsUsernameExist").html("This username is available!");
                return true;
            } else {
                $("#divIsUsernameExist").html("This username is not available!");
                return false;
            }
        }
    });
    }
}

但是我得到相同的结果 - 当它为空时为假,在输入某个值时为未定义。我尝试在第二个函数中将$.ajax更改为$.getJSON,但结果仍然相同。

这是来自API.php的代码:

case "isUsernameExist":
        echo (isUsernameExist($_REQUEST["username"]));
        break;

它在包含的页面BusinessLogic.php中调用了一个函数,这是这个函数:

function isUsernameExist($username)
{
    $arr = select("select * from users where username='$username'");
    if(count($arr) == 1)
    return json_encode(true);
    else
    return json_encode(false);
}

我怎样才能让它发挥作用?

谢谢!

1 个答案:

答案 0 :(得分:1)

总结评论链:

  • 避免同步AJAX请求:删除async: false
  • 添加`dataType:'json',
  • return success处理程序中的
  • jQuery.ajax未设置外部函数的返回值。要正确传递结果,请定义回调处理程序。更换:

  • 之前:http://jsfiddle.net/wGfzc/
  • 之后:http://jsfiddle.net/wGfzc/2/