2011-09-14 61 views
1

我的問題是基於多個過程比基於代碼,但分享(也許偶然發現了一些不一致的地方),我使用:jQuery的,自定義的驗證和AJAX

  • 的jQuery 1.6.2
  • jQuery的驗證1.8.1

所以這裏去...

當自定義驗證增加(使用addMethod)要求到服務器(而不是建立在遠程調用)的調用,您必須設置爲同步響應,因爲該方法將在服務器返回結果之前完成。它是否正確?

我還假設2種主要的方法是通過調用帶async false或deferred.promise()的$ .ajax請求。它是否正確?

我一直在尋找通過使用getJSON提出的與自定義驗證相關的問題的許多帖子,答案通常是「你沒有返回任何東西」,但是這不會錯過這一點 - 也不是迴應也遲到了嗎?

感謝您的回覆!

回答

2

你的假設是正確的。你不能在自定義方法中使用異步請求,因爲jQuery驗證需要知道這是一個異步請求。這就是爲什麼你要在這種情況下,而不是自定義方法使用remote規則:

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

同步AJAX請求(或SJAX)都沒有的東西,我會建議你做的事情。

+0

感謝Darin - 我在Rails上試圖讓我的路由和控制器儘可能幹,所以我不想創建新的操作來處理簡單的驗證檢查。我正在使用一個GET,並傳遞一些由我的搜索方法解析的參數來返回一個數組,然後檢查響應是否爲空。我想這種類型的複雜性,我必須使用自定義的方法,而不是遠程,是正確的? – sshefer

+0

@sshefer,我不知道Rails,但爲什麼你需要創建不同的動作來執行驗證檢查?你不能重複使用同一個動作嗎?取決於驗證是否通過,您的操作應返回true或false。因此定義一個動作,它將需要的所有參數作爲輸入,並讓它返回一個布爾值。 –

+0

多數民衆贊成在一個偉大的想法,我唯一的問題/問題是我可以重寫遠程方法,以便我可以明確地告訴它通過?我知道默認情況下它包含了調用中的字段名稱和值以及您定義的數據。如果我能自己設定參數,那將是理想的。 – sshefer