我已经完成了这个功能,似乎工作得很好,但是它返回了“#”,因为它不适合使用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');
答案 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”它将起作用。