jQuery验证器addMethod始终显示错误

时间:2014-02-03 22:53:10

标签: javascript jquery

$.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总是会显示错误,有什么问题?

3 个答案:

答案 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)

服务器的响应是异步给出的。尝试根据jQuery's documentation

async: false添加到您的选项中

编辑

正如@BotskoNet所说,你将在匿名函数中返回值。