我尝试使用parsley的js自定义验证程序来检查表单上的唯一电子邮件地址。然而,当我无所谓的回归时,它并没有阻止提交表格。
ajax请求checkEmailExists返回true或false,具体取决于电子邮件是否存在
window.Parsley
.addValidator('uniqueUsername', {
requirementType: 'string',
validateString: function(value, requirement) {
$.ajax({
url: "checkEmailExists",
data: {username: value},
dataType: 'json',
method: 'POST',
data: { email: $( "#email" ).val() },
async: false,
success: function(data) {
return data;
}
});
},
messages: {
en: 'This email address already exists!'
}
});
<input type="text" id="email" name="email" placeholder="Email" data-parsley-uniqueUsername data-parsley-required="true" data-parsley-type="email"/>
答案 0 :(得分:2)
您要返回的承诺必须失败或成功,而不是true
或false
成功。
最简单的可能就是使用remote
验证器。
不相关,但对于像这样的幂等请求,您应该使用GET
,而不是POST
。
答案 1 :(得分:1)
正如Marc所说,你的承诺必须失败才能成功,而你的验证人姓名也不能有大写字母或特殊字符,所以试试这样的事情:
// uniqueUsername validator
window.Parsley.addValidator('uniqueusername', {
validateString: function (value, requirement) {
xhr = $.ajax({
url: "users_list_ajax.php",
dataType: 'json',
method: 'GET',
data: {
action: 'checkUserExists',
username: value
}
});
return xhr.then(function (data) {
console.log((data.isUnique == 0));
if (data.isUnique == 0) {
return true;
} else {
return $.Deferred().reject();
}
});
},
messages: {
en: 'Username already exists!',
ar: 'إسم المستخدم موجود مسبقا'
},
priority: 32
});