2012-04-26 33 views
0

我的代碼jQuery的遠程驗證:遠程數據傳遞到funcion

var validator = $("#form-utente").validate({ 
    rules: { 
     login: { checkLogin: true } 
    } 
} 

我 「checkLogin」 功能...

$.validator.addMethod("checkLogin", function(value, element) { 
    return eval($.ajax({ 
     url: "checkLogin.cfm", 
     async: false, 
     data: { 
      login: function() { 
       return $("#login").val(); 
      }, 
     } 
    }).remoteData); 
}); 

checkLogin.cfm(對RemoteData)返回 「假」,當我需要「真」,反之亦然。

我如何評估遠程數據? ...

我需要的東西,如:

rules: { 
    login: { checkLogin: function(remoteData) { 
     if(remoteData == true) { 
      return false; 
     } else { 
      return true; 
     } 
    }} 
} 

什麼想法? 非常感謝。

回答

3

通常,您會在jquery.validate中使用remote規則進行使用遠程服務的驗證。你的實現假設了一個同步調用,根據jQuery文檔可能會「暫時鎖定瀏覽器,在請求處於活動狀態時禁用任何操作」。如果在每次更改或模糊事件後都檢查它,這可能會變得非常糟糕,例如默認驗證行爲。

不幸的是,remote不提供掛鉤爲你改變你怎麼接收數據的解釋:

success: function(response) { 
    ... 
    var valid = response === true; 

雖然你可以覆蓋的success實施,當你設置你的規則,這需要你複製規則使用的邏輯來管理表單的驗證狀態(lines 1035 - 1050)。

所以......讓我們說你犯了一個小改動線沿線的插件:

success: function(response) { 
    ... 
    var valid = ($.isPlainObject(param) && param.isValidResponse) ? 
     param.isValidResponse(response) : 
     response === true; 

然後設置您的規則爲:

login: { 
    remote: { 
     url: "checkLogin.cfm", 
     data: { 
      login: function() { 
       return $("#login").val(); 
      }, 
     }, 
     isValidResponse: function(response) { 
      // do something with response 
      // return true or false 
     } 
    } 
} 

然後,您應該能夠以任何需要的方式解析響應。讓我知道這是否有幫助。