jquery远程validation:将远程数据传递给funcion

我的代码

var validator = $("#form-utente").validate( { rules: { login: { checkLogin: true } } } 

我的“checkLogin”function……

 $.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; } }} } 

任何的想法? 非常感谢。

通常,您将使用jquery.validate中的remote规则进行使用远程服务的validation。 您的实现假设一个同步调用,根据jQuery文档可能“暂时锁定浏览器,在请求处于活动状态时禁用任何操作”。 如果在每次更改或模糊事件之后检查它(例如默认validation行为),则可能会非常糟糕。

不幸的是, remote没有提供一个钩子来改变你收到的数据的解释方式:

 success: function(response) { ... var valid = response === true; 

虽然您可以在设置规则时覆盖success的实现,但这需要您复制规则使用的逻辑来管理表单的validation状态( 第1035-1050行 )。

所以…让我们说你对插件进行了一些小改动:

 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 } } } 

然后,您应该能够以任何需要的方式解析响应。 如果这有帮助,请告诉我。