2010-05-18 51 views
0

我很喜歡這個非常簡單的(我敢肯定)jQuery/Javascript問題。 下面的代碼:jQuery驗證程序中添加的方法內的Ajax方法

jQuery.validator.addMethod("emailExists", function(value, element, param) { 
var email = value || ''; 
var valid = 0; 
$.ajax({ 
    type: "POST", 
    url: param, 
    data: "email=" + email, 
    success: function(msg) { 
       if (msg != '' && msg) 
       { 
        valid = 0; 
       } 
       else 
       { 
        valid = 1; 
       } 
     } 
}); 
return valid; 
}, "* Email address already registered, please login."); 

這個函數被調用,其中用戶在註冊表單中輸入自己的電子郵件地址,一切似乎完美地工作,但我返回有效的變量沒有更新,而當我使用一個警報框它正確完成!

它看起來像在AJAX完成之前返回值,任何想法?

乾杯,
尼古拉斯。

回答

0

你的代碼失敗,因爲AJAX異步工作。你的return語句在成功函數被調用之前就已經達到了。爲了使同步添加async: false到您的AJAX調用是這樣的:

$.ajaxA({ 
    async: false, 
    type: "POST", 
    url: param, 
    data: "email=" + email, 
    success: function(msg) { 
       if (msg != '' && msg) 
       { 
        valid = 0; 
       } 
       else 
       { 
        valid = 1; 
       } 
     } 
}); 
+0

Wokrs非常感謝!我知道ajax異步工作,這就是爲什麼我可以準確地說出問題出在哪裏,但我不知道有一個屬性來防止JS,謝謝! – Nicolas 2010-05-18 15:23:10

0

還有就是remote rule option,讓你做這樣的事情:

$("#myform").validate({ 
    rules: { 
    email: { 
     required: true, 
     email: true, 
     remote: { 
     url: "check-email.php", 
     type: "post", 
     data: { 
      username: function() { 
      return $("#username").val(); 
      } 
     } 
     } 
    } 
    } 
}); 
+0

是的,我看到了,但並沒有幫助我的問題:) – Nicolas 2010-05-18 15:23:28