欧芹js的唯一用户名

时间:2016-10-31 18:48:55

标签: javascript jquery ajax parsley.js

我尝试使用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"/>

2 个答案:

答案 0 :(得分:2)

您要返回的承诺必须失败或成功,而不是truefalse成功。

最简单的可能就是使用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
});