jquery远程验证:将远程数据传递给函数

时间:2012-04-26 16:03:32

标签: jquery jquery-validate

我的代码

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

任何想法?

1 个答案:

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

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