0

我的代码

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) 在我需要“true”时返回“false”,反之亦然。

我如何评估远程数据?...

我需要类似的东西:

rules: {
    login: { checkLogin: function(remoteData) {
        if(remoteData == true) {
            return false;
        } else {
            return true;
        }
    }}
}

任何想法?

4

1 回答 1

3

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

不幸的是,remote它没有为您提供一个挂钩来更改您收到的数据的解释方式:

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

虽然您可以在设置规则时覆盖实施success,但这将要求您复制规则使用的逻辑来管理表单的验证状态(第 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
        }
    }
}

然后,您应该能够以任何需要的方式解析响应。让我知道这是否有帮助。

于 2012-04-26T17:17:16.777 回答