jQuery验证远程

时间:2012-09-19 08:19:39

标签: jquery jquery-validate

检查远程电子邮件地址时,我遇到了jquery验证插件的问题。

远程函数返回一个JSON字符串,如:

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

我知道jquery验证中的默认设置应该只包含一个返回true或false的json字符串。但我需要返回已检查的电子邮件。

是否可以使用远程验证功能来检查json-property“isValid”?

谢谢,

詹姆斯·福特

3 个答案:

答案 0 :(得分:3)

要处理来自自定义远程验证调用的响应,您必须创建自定义规则。在此示例中,我们将检查用户缺口是否可用。

jquery validation cutom rule:

$('#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" />

答案 1 :(得分:2)

您可以轻松扩展验证器插件。您所要做的就是使用$.validator.addMethod(),添加一个进行远程调用的方法,获取您显示的JSON字符串,执行您需要返回电子邮件地址的任务,并在返回时返回true或false到验证流程。

这可能会有所帮助:http://docs.jquery.com/Plugins/Validation/Validator/addMethod#namemethodmessage

答案 2 :(得分: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
    }

...

})