【问题标题】:jQuery validator addMethod, no matter what displays error messagejQuery验证器addMethod,不管什么显示错误信息
【发布时间】:2011-06-22 16:44:59
【问题描述】:

我正在努力使用 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 的响应是正常的。我做了一些调试,放置了一些警报(),结果很有意义。我确保控制器正在回显而不是返回。

据我所知,该方法中的逻辑似乎没问题,所以我一定遗漏了一些东西。

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

T.I.A.

【问题讨论】:

    标签: javascript jquery ajax validation


    【解决方案1】:

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

    您可以使$.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 调用完成。不过,对于简单的“用户名可用”验证来说,这可能没问题。

    【讨论】:

    • 工作就像一个魅力!我的验证器根本没有返回任何东西!坦克为您的答案和整个解释,感谢它。
    猜你喜欢
    • 2013-01-18
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多