在jquery验证中添加远程规则

在jquery验证中添加远程规则,jquery,ajax,validation,backbone.js,Jquery,Ajax,Validation,Backbone.js,我正在尝试使用jquery验证远程处理规则验证注册表的电子邮件字段 以下是我尝试过的: $.validator.addMethod("isAlrdExist", function(value, element) { var inputElem = $('#registerForm :input[name="email"]'), data = { "email" : inputElem.val() }, eRe

我正在尝试使用jquery验证远程处理规则验证注册表的电子邮件字段

以下是我尝试过的:

$.validator.addMethod("isAlrdExist", function(value, element)
    {
        var inputElem = $('#registerForm :input[name="email"]'),
                data = { "email" : inputElem.val() },
                eReport = ''; //error report
        $.ajax(
                {
                    type: "GET",
                    url: getURL() + WebConfig.RACustomer + "?$filter=WebAccount eq '" + $("#email").val() + "'",
                    dataType: "json",
                    success: function(res)
                    {
                        if (res.length != 0)
                        {
                            return '<p>This email address is already registered.</p>';
                        }
                        else
                        {
                            return true;
                        }
                    },
                    error: function(xhr, textStatus, errorThrown)
                    {
                        return false;
                    }
                });

    }, '');


    $("#registerForm").validate({
        onkeyup: false,
        rules: {
            email: {
                isAlrdExist: true
            }
        }
    });
问题:当我执行console.log$registerForm.valid;,单击“注册”按钮,即使数据库中还不存在电子邮件,但结果是错误的


你知道是什么导致了这种情况吗。

现在还不是100%清楚你是否可以把所有你想要的东西都塞进默认规则中,但值得一试

$('#registerForm').validate({
    rules: {
        email: {
            remote: {
                url:getURL() + WebConfig.RACustomer,  //will only work if this is static relative to the form
                data: {
                    "email" : function(){
                         return $('#registerForm input[name="email"]').val();
                     },
                     "$filter" : function() {
                         return "WebAccount eq '"+$('#email').val()+"'"
                     }
                },
                dataType:'html',
                type:'GET',
                //fiddle with the data here to ultimately return an error message or true
                dataFilter:function(data){
                   if (data.length != 0){
                       return '<p>This email address is already registered.</p>';
                   }else{
                       return true;
                   }
                }
            }
        }
    }
});

我在这里做了一个工作示例:

[IsalDexist]的绑定函数不返回任何内容。在这种情况下,ajax回调函数的返回值没有任何意义。在ajax执行之前仍然返回true。所以,当我填写电子邮件文本框,然后点击注册按钮,console.logdata在dataFilter id中返回true后完成。这不重要吗?在内部,validate插件应该等到ajax调用解决后再提交表单。虽然您的评论不清楚,但是在AJAX调用完成后调用dataFilter函数。我确实注意到我在那里输入了一个错误,我调用了结果数据,但使用了res,这显然是不对的。我确实按照您的答案进行操作,并在单击register按钮时使用console.long$registerForm.valid。然后在数据过滤器工作之前得出结果:/好吧,不,不是这样的。请参见我的编辑示例。我还必须将数据类型更改为html。