2010-12-07 177 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(); 
      } 
     } 
}