我的代码
var validator = $("#form-utente").validate( {
rules: {
login: { checkLogin: true }
}
}
我的“checkLogin”功能...
$.validator.addMethod("checkLogin", function(value, element) {
return eval($.ajax({
url: "checkLogin.cfm",
async: false,
data: {
login: function() {
return $("#login").val();
},
}
}).remoteData);
});
checkLogin.cfm(remoteData)返回“false”,当我需要“true”时,反之亦然。
我如何评估远程数据? ...
我需要类似的东西:
rules: {
login: { checkLogin: function(remoteData) {
if(remoteData == true) {
return false;
} else {
return true;
}
}}
}
任何想法?
答案 0 :(得分:3)
通常,您使用jquery.validate中的remote
规则进行使用远程服务的验证。您的实现假设一个同步调用,根据jQuery文档可能“暂时锁定浏览器,在请求处于活动状态时禁用任何操作”。如果在每次更改或模糊事件之后检查它,可能会非常糟糕,例如默认验证行为。
不幸的是,remote
没有提供一个钩子来改变你收到的数据的解释方式:
success: function(response) {
...
var valid = response === true;
虽然您可以在设置规则时覆盖success
的实现,但这需要您复制规则使用的逻辑来管理表单的验证状态(lines 1035 - 1050)。 / p>
所以...让我们说你对插件进行了一些小改动:
success: function(response) {
...
var valid = ($.isPlainObject(param) && param.isValidResponse) ?
param.isValidResponse(response) :
response === true;
然后将您的规则设置为:
login: {
remote: {
url: "checkLogin.cfm",
data: {
login: function() {
return $("#login").val();
},
},
isValidResponse: function(response) {
// do something with response
// return true or false
}
}
}
然后,您应该能够以任何需要的方式解析响应。如果这有帮助,请告诉我。