1

参考資料:

質問:

  1. なぜ jQuery.validation の「ドキュメント」は非常にわかりにくく、基本的な例でさえ深刻に欠けているのでしょうか?

  2. 本当の質問:

AJAX 呼び出しを行うカスタム バリデーターがあります。その呼び出しは、さまざまなエラー メッセージを必要とするさまざまな値を返す可能性があります。応答に基づいてエラー メッセージを変更する方法がわかりません。いくつかのコード:

<html>
<head>
<script>
// Set error value variable default & scope
var checkEmailErrorMessage = "API Error";

// AJAX Failure Error
checkEmailError = function(jqXHR, textStatus, errorThrown) {
    if (jqXHR.status == 404) {
        alert("Could not find the API Server (404)");
    } else {
        alert("Some horrifying error occurred: " + textStatus);
    }
    return false;
};

// AJAX Success Handler
checkEmailResponse = function(data, code, jqXHR) {
    switch (data.code) {
        case 200:
            return true;
        case 401:
            checkEmailErrorMessage = "Duplicate Email";
            alert("Sorry, our system has detected that an account with this email address already exists");
            break;
        case 403:
            checkEmailErrorMessage = "Invalid Email";
            alert("Sorry, our system has detected that this email is forbidden");
            break
        case undefined:
            alert("An undefined error occurred.");
            break;
        default:
            alert("A horrible error occurred.");
            break;
    }
    return false;
};

// The Custom Validator
jQuery.validator.addMethod("checkEmail", function(value, element) {

    $.ajax({
        type: "POST",
        cache: "false",
        async: "false",
        url: "/json/checkEmail",
        dataType: "json",
        data: {
            email: function() {
                return $("#email").val();
            }
        },
        success: checkEmailResponse,
        error: checkEmailError
    });

}, checkEmailErrorMessage);

// The Validator Settings
form_validation_settings = {
    onkeyup: false,
    rules: {
        "email": {
            required: true,
            minlength: 2,
            maxlength: 42,
            email: true,
            checkEmail: true
        }
    }
};

// The Binding
$(document).ready(function(){
    $('#MyForm').validate(form_validation_settings);
});

</script>
</head>

<body>

    <!-- the Form -->
    <form id="MyForm">
        <input type="text" name="email"/>
        <input type="submit" name="submit"/>
    </form>

</body>
</html>

なんといってもエラーメッセージは「API Error」。検証ドキュメントには次のように記載されています。

メッセージ: 「jQuery.validator.format(value)」によって作成された関数にすることができます。

しかし、どうすればこれを装備できますか?私が呼び出す関数はすべて、AJAX 呼び出しの結果である必要があります。

どんなアイデアでも大歓迎です。前もって感謝します!

4

2 に答える 2

0

次の 2 つのオプションがあります。

  • Remoteは、'true' である JSON 文字列を返すことを要求することで機能します。AJAX 呼び出しから引用符で囲まれた文字列として完全なエラー メッセージを返すことができます。

擬似コード:

  print '"'.messages[code].'"';
  • エラー コードを返し、それを必要なメッセージに変換する ajax 呼び出しにdataFilterを設定します。

別の場所で、次のようにメッセージ配列をセットアップしました。

 var messages = ['Code 0 error message','Code 1 error message', etc ];

       //in your validate rules
       remote: {
            url: 'foo.php',
            dataFilter: function (data, type) {
                return '"' + messages[data] + '"';
            },
            type: 'post'
        }    

オプション 1オプション 2の作業例

于 2013-06-07T16:23:57.583 に答える