这是检查返回值是否为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,它会工作。
为什么这样做?
答案 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调用结果的东西必须在成功处理程序中,由成功处理程序调用,或者以只在成功处理程序之后运行的方式定义。