我正在努力使用 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/