2010-02-03 60 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驗證插件的規則... e.g

$("#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?

假設我們有一個自定義的驗證檢查獨特的移動,因此,我們將進行如下檢查unqiue移動沒有增加一個新的方法:

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

很好回答:) –

+0

我們可以用'$ .get()'來做這個嗎? –

+1

是的,您可以使用$ .get()函數,因爲它是通過jQuery向服務器發送ajax調用的抽象方法,但在這種情況下,您必須將例如「mobile =」+ value的數據發送到您正在請求的網址。 – 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

相關問題