2010-12-07 121 views
1

我正在尝试执行用户名可用性的ajax检查,并仅在用户名可用时提交表单。jQuery验证 - submitHandler和AJAX响应

使用jQuery验证插件,我已经设置:

 submitHandler: function(form) { 
     if (ajaxCheck() == true){ 
      alert('true'); 
     } 
    } 

而且我的用户名检查功能如下:

function ajaxCheck(){ 
usernameVal = $("#username").val().toLowerCase(); 
usernameVal = usernameVal.replace(/[\s\W]/g, ''); 
$.post("/app/signup/username/", { 
username: usernameVal 
}, function(response){ 
    if (response == "Username not available.") { 
     $("#signup").validate().showErrors({ "username" : "Username Not Available." }); 
     alert('false'); 
     return false; 
    } else { 
     alert('true'); 
     return true; 
    } 
}); 

}

的问题是它没有返回true或false到submitHandler。我不确定是否因为返回语句在$ .post内?

如果我独立运行ajaxCheck,它会根据可用性提醒false和true,如果从submitHandler调用它,则不会返回false/true。

任何洞见赞赏。

+0

我认为该方法得到完成之前,它返回一个值,因为它是异步调用,我对此90%肯定... – kobe 2010-12-07 18:48:12

回答

1

Novon,

你可以设置一个变量的ajax的成功里面,但据我所知,你不能从阿贾克斯返回一个值。

它是一个异步调用,因此保持一个全局变量将您的逻辑检查转移到succuess。

你不能让一个Ajax调用,并得到这样一个方法的返回值

+0

谢谢我会尝试。 – novon 2010-12-07 19:10:24

0

真棒,与现在的工作:在ajaxCheck

$.validator.addMethod("usercheck", function(value, element) { 
     ajaxCheck(); 
     return validName; 
}, "Username not available!"); 

,并设置一个变量“validName”,而不是返回真/假();

+0

它甚至如何工作? validName没有在任何地方定义 – neelmeg 2016-05-16 19:11:13

2

您也可以使用远程选项,就像这样!

remote: { 
    url: myUrl = location.protocol + "//" + location.host + '/trabajos/json.php?c=wrk&a=validMail', 
    type: "post", 
    data: { 
     correo: function() { 
       return $("#subtrabajo_correo").val(); 
      } 
     } 
}