$.validator.addMethod("uniqueEmail", function() {
$.ajax({
type: "POST",
url: "/user/check_email",
data: {
email: $( "#email" ).val()
},
success: function(data) {
console.log(data);
if(data == 1)
{
return false;
}
else
{
return true;
}
}
})
}, "That email already exists");
email: {
required: true,
email: true,
uniqueEmail: true
}
我不知道为什么即使我返回true或false,uniqueEmail总是会显示错误,有什么问题?
答案 0 :(得分:3)
问题是你的ajax调用是异步的,你给.addMethod()
的函数需要立即返回一个值。
但不要试图设置async: false
。请改用remote method。
我相信它看起来像这样:
email: {
required: true,
email: true,
remote: {
url: "/user/check_email",
type: "post"
}
}
当通过远程方法进行ajax调用时,它会自动包含一个名为“email”的参数,其中包含电子邮件输入的值,所以你很擅长。您只需更改服务器代码,使其返回"true"
或"false"
,而不是"0"
或"1"
。 (注意:您返回"0"
表示该电子邮件未被使用,这意味着它是唯一的。在这种情况下,您现在应该返回"true"
。)
更新:
您已接受此答案,但要跟进如何指定错误消息,您可以通过使用以下内容让服务器响应如何:
email: {
required: true,
email: true,
remote: {
url: "/user/check_email",
type: "post",
dataFilter: function(data) {
return (data == 1) ? "true" : "That email already exists";
}
}
}
答案 1 :(得分:2)
传递给addMethod
的匿名函数未返回值。您正在使用jQuery ajax处理程序,它使用success
上的函数。您的return
语句在此函数内。
答案 2 :(得分:0)