2012-04-26 7 views
0

私のコードjqueryのリモート検証:私は必要なときに

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

私の "checkLogin" 機能をfuncionリモートデータを渡す...

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

checkLogin.cfm(リモートデータ)は、 "偽" を返します"true"、そしてviceversa。

どのようにリモートデータを評価できますか?

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

任意のアイデア:...

私のようなものが必要? 多くのありがとうございます。

答えて

3

通常、リモートサービスを使用する検証のために、jquery.validateのremoteルールを使用します。あなたの実装は同期呼び出しを想定しています。これは、jQueryのドキュメントによれば、「ブラウザが一時的にロックされ、リクエストがアクティブな間にアクションを無効にする」ことがあります。これは、デフォルトの検証動作のように、すべての変更またはブラーイベントの後にチェックされていると、かなり悪くなる可能性があります。

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

あなたのセットアップは、あなたのルール、これはあなたを必要とするときにsuccessの実装をオーバーライドすることができますが:残念ながら、remoteはあなたが受け取るデータの解釈方法を変更するためのフックを提供していません

ルールのロジックを複製してフォームの検証状態を管理します(lines 1035 - 1050)。あなたは、その後にできるはずです

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

:として

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

し、セットアップあなたのルール:

だから... ...あなたはの線に沿ってプラグインに小さな変更を加えるとしましょう必要に応じて応答を解析します。これが役に立ったら教えてください。

関連する問題