2014-02-27 120 views
1

我有一個mootools的腳本:mootools |獨特的電子郵件驗證

Form.Validator.add('UniqueEmail', { 
    errorMsg: 'Email is taken', 
    test: function(element, props) { 

     var valid = false; 
     if (element.value.length > 0) { 

     site.request(app, {'action':'account.email', 'email':element.value}, function(r){ 
      valid = parseInt(r.istaken) != 1 ? true : false;    
     },'GET'); 

     return valid; 
     } 
    } 
}); 

/服務器返回:{ 「地位」:1, 「istaken」:0} /但輸入實地核查:失敗。 問題在哪裏?謝謝。

+0

'site.request'做了以下工作:1.'application/json' - >通過'JSON.parse',所以'r'是一個對象 - 否則你可能總是在做'NaN!= 1 => true '或投擲'istaken'的參考。如果返回'0' /'1'並且是對象,則不需要對它進行類型轉換。只是'valid = !! r.istaken;'; 2.使用'async:false'運行XHR,阻塞驗證器直到達到響應?發佈'site.request'的源代碼和配置它的'app'對象(?)的值 - 或者至少給出一個概述 –

回答

1

您的請求回調函數(處理服務器響應的函數)是異步運行的,但驗證函數立即返回「valid」(false)的值。

回調函數運行時(即服務器響應後)Form.Validator.add()函數已經執行完畢,並且該字段很久以前已被標記爲無效。