使用ajax $ .POST()查看是否使用了用户名?

时间:2013-07-12 20:46:20

标签: javascript jquery ajax

这是检查返回值是否为1的块:

                } else if (validateUsername(username.val()) == 1) {
                    errors.html("That username already exists! Please use another.<span id='close'>X</span>");
                    errors.fadeIn("slow");  
                    username.css("border", "solid 2px red");                    
                }

如果是,则存在用户名..

现在让我们来做ajax工作。

    function validateUsername(username) {
        $.post("js/ajax/ajax.php", { validateUsername : username }, function(data) {
            return data;
        });
    }

这将向ajax发送请求,并使用响应填充var数据。

if (isset($_POST['validateUsername']))
{
    echo 1;
}

这是发送响应的ajax,现在基本上是int 1,用于检查。

但是,我总是未定义。 我的意思是,fireBug确实说“request = 1”,但看起来if语句不起作用。

如果我只是返回1;手动没有ajax,它会工作。

为什么这样做?

3 个答案:

答案 0 :(得分:5)

Ajax是异步的,所以当你在这里返回数据时:

function validateUsername(username) {
    $.post("js/ajax/ajax.php", { validateUsername : username }, function(data) {
        return data;
    });
}

并尝试在此处获取:

validateUsername(username.val()) == 1

它不起作用,因为ajax调用尚未完成(并且返回仅从内部函数返回)。
相反,你应该这样做:

function validateUsername(username) {
    return $.post("js/ajax/ajax.php", { validateUsername : username });
} 

validateUsername(username.val()).done(function(data) {
    if ($.trim(data) === 1) {
        errors.html("That username already exists! Please use another.<span id='close'>X</span>");
        errors.fadeIn("slow");  
        username.css("border", "solid 2px red");       
    }
});

答案 1 :(得分:1)

Ajax函数是异步的。 validateUsername()在ajax调用完成之前返回(没有返回值,这就是你看到未定义的原因)。

处理此问题的最优雅方法可能是重构return $.ajax...并使用返回的Deferred对象。

答案 2 :(得分:1)

AJAX代表 异步 JavaScript和XML。忽略XML部分,但异步是在背后咬你的东西。

任何依赖于ajax调用结果的东西必须在成功处理程序中,由成功处理程序调用,或者以只在成功处理程序之后运行的方式定义。