0

私のコード

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) は、"true" が必要なときに "false" を返し、その逆も同様です。

リモートデータを評価するにはどうすればよいですか? ...

私は次のようなものが必要です:

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

何か案が?

4

1 に答える 1

3

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

残念ながら、remote受信するデータの解釈方法を変更するためのフックは提供されていません。

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

ルールを設定するときにの実装をオーバーライドできますがsuccess、これには、フォームの検証状態を管理するためにルールで使用されるロジックを複製する必要があります(行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
        }
    }
}

これで、必要な方法で応答を解析できるようになります。これが役立つかどうか教えてください。

于 2012-04-26T17:17:16.777 に答える