This question already has answers here:
How do I return the response from an asynchronous call?
(38个答案)
7年前关闭。
我有一个表单验证功能,该功能验证并检查用户名是否被使用(ajax)。
这就是我所说的代码:
我还提醒该函数以查看其返回的内容:
问题是警报框在某些情况下会发出“未定义”警报,因此我的验证不会跳转到下一个字段,它会挂起。
更具体地说,它会在所有情况下都警告“未定义”,除非“ length === 0”,然后警告false,这是正确的。
这是usernameValid函数:
谁知道错在哪里,即为什么在我测试“响应”变量的情况下代码返回未定义的?
顺便说一句:用户名的验证本身可以正常工作(应显示错误等),但返回未定义...
谢谢
因此,回调中的
如果您有
另一种方法是使您的AJAX调用同步...但是我强烈建议您不要这样做,因为它会在执行时完全锁定用户的浏览器。
(38个答案)
7年前关闭。
我有一个表单验证功能,该功能验证并检查用户名是否被使用(ajax)。
这就是我所说的代码:
function validate(){
if(usernameValid()){
return true;
}
else {
return false;
}
}
我还提醒该函数以查看其返回的内容:
alert(usernameValid());
问题是警报框在某些情况下会发出“未定义”警报,因此我的验证不会跳转到下一个字段,它会挂起。
更具体地说,它会在所有情况下都警告“未定义”,除非“ length === 0”,然后警告false,这是正确的。
这是usernameValid函数:
function usernameValid(fld) {
if( $('#username').val().length !== 0 ) {
$.post("username_check.php", {
username: $('#username').val()
}, function(response){
response = escape(response);
if(response==1){
$('#username_error_invalid').show();
$('#username_error_empty').hide();
$('#username_error_taken').hide();
return false;
}
else if(response==2){
$('#username_error_taken').show();
$('#username_error_invalid').hide();
$('#username_error_empty').hide();
return false;
}
else {
$('#username_error_taken').hide();
$('#username_error_invalid').hide();
$('#username_error_empty').hide();
return true;
}
});
}
else{
$('#username_error_empty').show();
$('#username_error_invalid').hide();
$('#username_error_taken').hide();
return false;
}
}
谁知道错在哪里,即为什么在我测试“响应”变量的情况下代码返回未定义的?
顺便说一句:用户名的验证本身可以正常工作(应显示错误等),但返回未定义...
谢谢
最佳答案
这是一个异步调用:
$.post("username_check.php", {....
因此,回调中的
return
语句会在usernameValid
返回之后很长时间发生(并且由于它在运行时未返回任何内容,因此它是undefined
)。如果您有
return false;
,则应该调用另一个函数,例如:userNameInvalidFunction()
,以及true
的其他函数……或者只是继续提交,等等。另一种方法是使您的AJAX调用同步...但是我强烈建议您不要这样做,因为它会在执行时完全锁定用户的浏览器。