在jquery验证中添加远程规则
我正在尝试使用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
$.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。