-1

这是检查返回值是否 = 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,它会工作。

为什么这样做?

4

3 回答 3

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");       
    }
});
于 2013-07-12T20:48:42.977 回答
1

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

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

于 2013-07-12T20:48:34.493 回答
1

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

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

于 2013-07-12T20:48:51.187 回答