2010-02-03 2 views
3

Если хотите, обратитесь за помощью к Jquery form validation plugin.Плагин проверки JQuery: используйте пользовательский метод Ajax

Я проверяю поле электронной почты своей формы на размытие, создав 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' 
        } 
       }) 
    }); 

То, что я хотел бы сделать, это encorporate этот вызов в правилах моего JQuery Validation Plugin ... например

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

      } 
     }); 

Хотите знать, если есть в любом случае достижения этой цели? Большое спасибо

ответ

1

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

$.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 
      }); 
1

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

$.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

Привет, я действительно ценю ваш ответ, я перешел от этого проекта, так не может применить обратную связь. Я уверен, что это пригодится, но в следующий раз я использую jQuery. Спасибо – namtax

15

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

Вам необходимо будет работать с асинхронным способом. Смотрите также этот пост: How can I get jQuery to perform a synchronous, rather than asynchronous, Ajax request?

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

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"); 
+0

nice ответил :) –

+0

мы можем использовать '$ .get()' для этого? –

+1

да, вы можете использовать функцию $ .get(), поскольку это абстрактный метод для создания ajax-вызова на сервере через jQuery, но в этом случае вам нужно отправить свои данные, например: «mobile =» + значение, добавленное к адрес, который вы запрашиваете. – theCodeMachine

0

Для стороны сервера проверки 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(); 
      } 
     } 
     } 
    } 
    } 
}); 

Читайте документацию здесь remote-method

Смежные вопросы