2016-10-31 36 views
0

我想使用欧芹的js自定义验证器来检查我的表单上唯一的电子邮件地址。然而,当我不管我回来的时候,它不会停止提交表单。独特的用户名和欧芹js

Ajax请求checkEmailExists取决于如果电子邮件存在

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"/> 

回答

1

你必须返回失败或成功,与truefalse不会成功的承诺返回true或false。

最简单的可能是使用remote验证程序。

不相关,但对于像这样的幂等请求,您应该使用GET而不是POST

0

正如马克说你的诺言必须失败成功,也是你的校验器名不能有大写字母或特殊字符,所以尝试这样的事:

// 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 
});