Javascript函数从HTML事件运行,但从IF语句失败

Javascript函数从HTML事件运行,但从IF语句失败,javascript,html,Javascript,Html,我在单击关闭用户名输入时运行了此功能: function checkUsername(){ if($("#signupUsername").val()!=""){ $.post("checkUsername.php",$("#signupForm :input").serializeArray(),function(data){ if(data){ $("#signupUsernameOutput").text("U

我在单击关闭用户名输入时运行了此功能:

function checkUsername(){
    if($("#signupUsername").val()!=""){
        $.post("checkUsername.php",$("#signupForm :input").serializeArray(),function(data){
            if(data){
                $("#signupUsernameOutput").text("Username Taken");
                $("#signupUsernameOutput").css("color","#CE0000");
                return false;       
            }
            else{
                $("#signupUsernameOutput").text("Username OK");
                $("#signupUsernameOutput").css("color","green");                
                return true;
            }
        });
    }
    else{
        $("#signupUsernameOutput").text("");
        return false;   
    }
}
使用:

<input type="text" class="form-control" onblur="checkUsername()" placeholder="Username" name="signupUsername" id="signupUsername">

您正在调用的函数发送一个异步AJAX请求。那是行不通的。它将准备好AJAX请求,然后返回
未定义的
,在任何情况下都不会返回true


您可能需要考虑更改代码,并为“承诺”添加代码

除了您忘记了一个
之外,当
$.post()
完成时执行的函数是异步的,因此在您调用
checkUsername
时,完成函数尚未启动。此外,您将向该函数返回
true
false
,而不是
checkUsername
。简而言之,所有事情都必须在完成函数中发生,返回任何东西都没有任何好处。但是,您可以在完成函数中更改HTML。

您缺少一个
。这是在您的原始代码中还是仅仅是一个复制错误?Barmar指出有一个复制错误,我已经纠正了。粘贴到这里时,您怎么会不小心从代码中间删除一个括号?如果(checkUsername()==true)equals是多余的:)这只是代码风格的建议。
if(checkUsername()==true){
       alert("success!");
       //and some other stuff...
}