我有一个表单验证函数,它验证并检查用户名是否被接受(ajax)。
这就是我调用代码的方式:
function validate(){
if(usernameValid()){
return true;
}
else {
return false;
}
}
我还提醒函数以查看它返回的内容:
alert(usernameValid());
问题是警报箱在某些情况下警告“未定义”,因此我的验证不会跳转到下一个字段,它会挂起。 更具体地说,它在所有情况下都会发出“未定义”警告,除非“长度=== 0”,然后警告错误,这是正确的。
这是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;
}
}
任何人都知道错误,即在我测试“response”变量的情况下,为什么代码返回undefined?
BTW:用户名的验证本身有效(如果出现错误则会显示等),但它会返回undefined ...
由于
答案 0 :(得分:2)
这是一个异步调用:
$.post("username_check.php", {....
因此回调中的return
语句在usernameValid
返回后很久就发生了(因为它在运行时没有返回任何 ,它是undefined
)。
你有[{1}}的位置,你应该调用另一个函数,例如:return false;
,以及userNameInvalidFunction()
的其他内容......或者只是继续提交等等。
另一种方法是让你的AJAX调用同步......但我强烈建议不要这样做,因为它会在执行时完全锁定用户的浏览器。