我正在使用jquery验证来验证注册表单上的字段。我使用远程方法来调用我的web服务来查找是否存在电子邮件地址。
如果电子邮件地址已经存在,则会正确显示“正在使用的电子邮件地址”消息,但如果该电子邮件不存在,则会在页面上将成功值(1)作为错误返回。
以下是我正在使用的代码:
JQUERY:
$("#register-form").validate({
rules: {
udemail: {
required: true,
email: true,
remote: {
url: "/services/VerifyUserAvailability.ashx",
type: "post",
complete: function (data) {
if (data.responseText == "1") {
//alert("Free");
return false;
}
}
}
},
ignore: ".ignore"
},
messages: {
udemail: {
required: "Please enter your email address",
remote: "The email address has already been registered"
}
},
onfocusout: function(element) {
this.element(element);
},
errorPlacement: function(error, element) {
if (element.attr("name") == "terms" ) {
error.insertAfter("label.checkbox");
} else {
error.insertAfter(element);
}
},
highlight: function(element) {
$(element).parent().addClass("error");
},
unhighlight: function(element) {
$(element).parent().removeClass("error");
}
});
HTML:
<input type="text" value="" class="required email" id="EmailAddress" name="udemail">
我只需要在返回值为1时不显示错误消息。
答案 0 :(得分:0)
rules
选项中有错误...
rules: {
udemail: {
// rules for 'udemail'
},
ignore: ".ignore" // <- incorrect placement
},
ignore
选项不属于rules
中的。只有key:value
对由字段名称和规则组成,属于rules
。
ignore
选项是rules
的兄弟。
rules: {
// your rules
},
messages: {
// your messages
},
ignore: ".ignore", // <- goes here as a sibling of the other options
onfocusout: function(element) { .....
您正在错误地使用remote
方法...
remote: {
url: "/services/VerifyUserAvailability.ashx",
type: "post",
complete: function (data) { // <- UNNECESSARY
if (data.responseText == "1") {
//alert("Free");
return false;
}
}
}
complete
内部不需要带有布尔值的remote
回调函数。 /services/VerifyUserAvailability.ashx
上的服务器端功能应该给出一个&#34;响应&#34;如果字段通过验证,则echo
的{true
等)和false
(或表示错误消息的JSON字符串)如果不通过。然后,插件会自动处理true
和false
响应。
如果您的服务器端功能构造正确,这就是您所需要的......
remote: {
url: "/services/VerifyUserAvailability.ashx",
type: "post"
}
http://jqueryvalidation.org/remote-method/
serverside 资源通过jQuery.ajax(XMLHttpRequest)调用,并获取与已验证元素的名称对应的键/值对及其值作为GET参数。 响应评估为JSON,有效元素必须为
true
,无效元素可以是false
,undefined
或null
,使用默认消息;或者一个字符串,例如。"That name is already taken, try peter123 instead"
显示为错误消息。
引用OP:
&#34;但是,如果电子邮件不存在,则会在页面上将成功值(1)作为错误返回。&#34;
这是因为它将1
的服务器响应解释为字符串而不是true
。来自服务器端响应的任何字符串都被视为&#34;失败&#34;验证和字符串本身成为错误消息。确保服务器端脚本的响应为true
表示成功,false
或JSON字符串表示失败。