Jquery验证异步不起作用

时间:2012-01-13 15:00:52

标签: jquery ajax validation

我已经完成了这个功能,似乎工作得很好,但是它返回了“#”,因为它不适合使用AJAX。我试图删除返回调用,看看。

需要等到AJAX完成才能返回。 JSP工作正常。

有什么问题?

jQuery.validator.addMethod("knidExist", function(value, element) {
    var valid = "#";
      $.ajax({
          async: false,
          type: "POST",
          url: "USER.jsp",
          data: "knid="+value,
          dataType: "html",
          success: function(msg) {
              // if the user exists, it returns a string "true"
              if($.trim(msg) != "true") {
                 //return false;
                 valid = false;  // already exists
              } else {
                 //return true;
                 valid = true;      // username is free to use
              }
          }  
     });
    return valid;
}, 'This USER does not exist');

3 个答案:

答案 0 :(得分:6)

您需要使用内置的remote验证方法,而不是添加自己的验证方法,而是专门为此目的而设计。

你会以类似

的方式使用它
remote: {
    type: "POST", 
    url: "USER.jsp",  
    data: { knid: value },
}

查看文档链接的示例。

答案 1 :(得分:4)

我自己找到了一种方法。几乎是远程方法的完整副本,但带有静态消息和URL。 希望我可以帮助一些人。

jQuery.validator.addMethod("userExist", function(value, element, param) {
if ( this.optional(element) )
    return "dependency-mismatch";

var previous = this.previousValue(element);
if (!this.settings.messages[element.name] )
    this.settings.messages[element.name] = {};
previous.originalMessage = this.settings.messages[element.name].remote;
this.settings.messages[element.name].remote = previous.message;

param = typeof param == "string" && {url:param} || param;

if ( this.pending[element.name] ) {
    return "pending";
}
if ( previous.old === value ) {
    return previous.valid;
}

previous.old = value;
var validator = this;
this.startRequest(element);
var data = {};
data["**user**"] = value;
$.ajax($.extend(true, {
    url: "validation.jsp",
    mode: "abort",
    dataType: "json",
    data: data,
    success: function(response) {
        validator.settings.messages[element.name].remote = "**This user do not exist"**;
        var valid = response === true;
        if ( valid ) {
            var submitted = validator.formSubmitted;
            validator.prepareElement(element);
            validator.formSubmitted = submitted;
            validator.successList.push(element);
            validator.showErrors();
        } else {
            var errors = {};
            var message = response || validator.defaultMessage( element, "remote" );
            errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
            validator.showErrors(errors);
        }
        previous.valid = valid;
        validator.stopRequest(element, valid);
    }
}, param));
return "pending";
}, "");

答案 2 :(得分:0)

将这些请求类型设为“发布”类型会导致问题。 这基本上提交了值,并没有等待响应。 -try使其类型为“get”它将起作用。