javascript - jQuery 验证器 addMethod,无论显示什么错误消息

标签 javascript jquery ajax validation

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

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

$.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 的响应正常。我做了一些调试,放置了一些 alerts(),结果很有意义。我确保 Controller 正在回显而不是返回。

据我所知,方法中的逻辑似乎没问题,所以我一定遗漏了什么。

任何人都可以阐明这一点吗?

T.I.A.

最佳答案

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

关于javascript - jQuery 验证器 addMethod,无论显示什么错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6443467/

相关文章:

javascript - 使用 javascript 直接将超过 50 MB 的文件上传到 S3 存储桶

javascript - JQuery 点击显示图像,然后在延迟后让它消失?

javascript - 在不更改类名的情况下访问特定的 Div

javascript - 播放音乐

javascript - 找不到node.js模块

javascript - 尝试将 JavaScript 中的 for 循环更改为过滤方法单行

javascript - 在树数据结构中聚合包含对象数组的属性

jquery - css 无法更改输入文本字段之间的空格

php - Ajax PHP 未向我提供任何响应文本

javascript - 如何防止 Javascript 中加载额外的函数