我正在使用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。
答案 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
调用完成。对于简单的“用户名可用”验证,这可能没问题。