0

リモートのメールアドレスをチェックするときに、jquery検証プラグインに問題があります。

リモート関数は次のようなJSON文字列を返します。

"{ "isValid": "true", "email": "email@email.com"  }"

jquery検証のデフォルト設定は、trueまたはfalseを返すjson-stringのみで構成する必要があることを知っています。しかし、私はチェックされた電子メールを返す必要があります。

json-property "isValid"をチェックするためのリモート検証機能を持つことは可能ですか?

ありがとう、

ジェームズフォード

4

3 に答える 3

3

カスタムリモート検証呼び出しからの応答を処理するには、カスタムルールを作成する必要があります。この例では、ユーザーニックネームが利用可能かどうかを確認しています。

jquery検証cutomルール:

$('#nick').rules("add", {
  // nick is required
  required: true,
  // nick can have from 3 to 30 characters
  rangelength: [3,30],
  remote: {
    url: "/your-api-url",
    type: "GET",
    data: {
      // nick is id of input field from html
      nick: function() {
          // get user input from field value
          return $('#nick').val();
      }
    },
    // custom filtering response from api call
    dataFilter: function(data) {
      // we need to parse data string to json
      var json = JSON.parse(data);
      if(json.nick === "true" || json.nick === true) {
          // jquery validate remote method
          // accepts only "true" value
          // to successfully validate field 
          return '"true"';
      } else {
          // error message, everything that isn't "true"
          // is understood as failure message
          return '"This nick is already taken."';
      }
    }
  }
});

ニックネームが利用可能な場合のAPIからの応答:

{nick:true}

html:

<input name="nick" id="nick" value="" placeholder="Nick" type="text" />
于 2015-02-22T21:36:27.720 に答える
2

バリデータープラグインは簡単に拡張できます。使用するだけ$.validator.addMethod()で、リモート呼び出しを行うメソッドを追加し、表示したJSON文字列を取得し、メールアドレスを返す必要があるタスクを実行し、最後にtrueまたはfalseを検証フローに戻します。

これは役立つかもしれません:http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage

于 2012-09-20T09:01:18.230 に答える
2

remote()をソースとして使用してカスタムメソッドを作成できると思います。何かのようなもの

jQuery.validator.addMethod("customRemote", function(value, element, param) {

...
// the piece of code doing AJAX response parsing

success: function(response) {
    validator.settings.messages[element.name].remote = previous.originalMessage;

    // original:
    var valid = response === true || response === "true";

    // replace with your own logic
    if(response.isValid == "true" && something == else) {
        // do the stuff
    }

...

})
于 2012-09-20T09:16:17.657 に答える