Плагин проверки JQuery: используйте пользовательский метод Ajax - PullRequest
3 голосов
/ 03 февраля 2010

Требуется некоторая помощь с плагином проверки формы Jquery , если это возможно.

Я проверяю поле электронной почты моей формы на размытие, совершая ajax-вызов в мою базу данных, который проверяетесли текст в поле электронной почты в настоящее время находится в базе данных.

    // Check email validity on Blur
       $('#sEmail').blur(function(){
       // Grab Email From Form
       var itemValue = $('#sEmail').val();
        // Serialise data for ajax processing
        var emailData = {
            sEmail: itemValue
        }
        // Do Ajax Call
         $.getJSON('http://localhost:8501/ems/trunk/www/cfcs/admin_user_service.cfc?method=getAdminUserEmail&returnFormat=json&queryformat=column', emailData, function(data){

                    if (data != false) {
                        var errorMessage = 'This email address has already been  registered';
                    }
                    else {
                        var errorMessage = 'Good'
                    }
                })
    });

Что я хотел бы сделать, это включить этот вызов в правила моего плагина проверки JQuery ... например,

    $("#setAdminUser").validate({
      rules:{
             sEmail: {
                  required: function(){
                  // Replicate my on blur ajax email call here
                 }                  
             },
            messages:{
                sEmail: {
                    required: "this email already exists"       

            }
        });

Хотите знать, есть ли способ достичь этого?Большое спасибо

Ответы [ 4 ]

15 голосов
/ 27 ноября 2012

Вы выполняете запрос AJAX, следовательно: проверка уже завершена, когда ваш пользовательский валидатор возвращает значение true или false.

Вам нужно будет работать с асинхронным. См. Также этот пост: Как заставить jQuery выполнять синхронный, а не асинхронный Ajax-запрос?

Допустим, у нас есть пользовательская проверка для проверки уникальности мобильного, поэтому мы добавим новый метод для проверки уникального номера мобильного телефона:

jQuery.validator.addMethod("uniqueMobile", function(value, element) {
    var response;
    $.ajax({
        type: "POST",
        url: <YOUR SERVER SCRIPT/METHOD>,
        data:"mobile="+value,
        async:false,
        success:function(data){
            response = data;
        }
    });
    if(response == 0)
    {
        return true;
    }
    else if(response == 1)
    {
        return false;
    }
    else if(response == 'logout')
    {
        return false;
    }
}, "Mobile is Already Taken");
1 голос
/ 16 декабря 2011

Попробуйте это:

$.validator.addMethod('unique', 
            function(value) {
         var result = $.ajax({ 
                             async:false, 
                             url:"http://yoursamedomain.com/checkemail",
                             data:'email='+ value, 
                             dataType:"text" }); 

         if(result .responseText) return true; else return false;

             } , "This email address has already been  registered");
1 голос
/ 04 апреля 2010

Вы можете добавить пользовательский метод проверки, подобный этому

 $.validator.addMethod('unique',
                     function(value) {
        $.get('http://localhost:8501/ems/trunk/www/cfcs/admin_user_service.cfc','?method=getAdminUserEmail&returnFormat=json&queryformat=column&emailData='+ value,
                            function(return_data) {
                                return return_data;
                            })
                         }
                         , "this email already exists"
                    );

затем добавьте класс unique в поле своей электронной почты, или вы можете использовать что-то вроде этого

$.validator.addClassRules("unique-email", {
                unique: true
            });
0 голосов
/ 03 октября 2017

Для проверки AJAX на стороне сервера используйте правило remote. Это то же самое, что и стандартный объект запроса jQuery AJAX. Ваш сервер должен вернуть строку «true» для допустимого значения или «false» для недействительного, также он может передать некоторую строку «Это письмо уже было принято», и это будет воспринято как недействительное, и отобразится как сообщение об ошибке:

$( "#myform" ).validate({
  rules: {
    email: {
      required: true,
      email: true,
      remote: {
        url: "check-email.php",
        type: "post",
        data: {
          username: function() {
            return $( "#username" ).val();
          }
        }
      }
    }
  }
});

Прочитайте документацию здесь Дистанционный метод

...