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

See if username is taken or not, using ajax $.POST()?

本文关键字:是否 用户 ajax POST 使用      更新时间:2023-09-26

这是检查返回值是否为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,它可以手动运行。

它为什么这么做?

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");       
    }
});
Ajax函数是异步的。validateUsername()在ajax调用完成之前返回(没有返回值,这就是您看到未定义的原因)。

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

AJAX代表异步JavaScript和XML。忽略XML部分,但异步是最让你头疼的部分。

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