jQuery验证器addMethod,无论显示什么错误信息

时间:2011-06-22 16:44:59

标签: javascript jquery ajax validation

我正在使用jQuery的验证器插件进行一些验证。

基本上我正在检查用户名是否已经存在,所以我使用 addMethod 来创建我自己的方法。我通过AJAX将请求发送到控制器(控制器,如MVC模式),该控制器查询数据库并生成响应,告知用户名是否存在。这是代码:

$.validator.addMethod("username_available", function(value, element) {
    $.ajax({
        url: MyPostURL,
        type: "POST",
        dataType: "html",
        data: ({username: jQuery.trim($("#username").val()),
              }),
        success: function(data) {
            if (data == "True")
                return true; // Available
            else
                return false; // Already exists, not available
        }
   })
}, "Username not available.");

无论该字段是否可用,都会显示错误消息“用户名不可用。”。

来自 MyPostURL 的回复是O.K.我做了一些调试,放置了一些警报(),结果很有意义。我确保控制器正在回应而不是返回。

据我所知,该方法中的逻辑似乎是O.K.,所以我必须遗漏一些东西。

任何人都可以对此有所了解吗?

T.I.A。

1 个答案:

答案 0 :(得分:3)

您的$.ajax调用是异步的,因此您的验证程序在AJAX调用完成之前返回;成功处理程序中的return语句不会从验证程序返回值,它只返回成功处理程序中的值,没有人关心成功处理程序返回的值。您的验证器回调函数根本不返回任何值,并且验证器引擎将缺少值解释为“false”。

您可以$.ajax同步:

$.validator.addMethod("username_available", function(value, element) {
    var is_valid = false;
    $.ajax({
        // as before...
        async: false,
        success: function(data) {
            is_valid = data == 'True';
        }
   });
   return is_valid;
}, "Username not available.");

但是这将锁定浏览器,直到$.ajax调用完成。对于简单的“用户名可用”验证,这可能没问题。