2011-06-22 102 views
1

我使用jQuery的驗證插件一些驗證掙扎。jQuery的驗證addMethod,無論什麼顯示錯誤消息

基本上我檢查,如果用戶名已經存在,所以我用addMethod創建自己的方法。我通過AJAX發送請求到控制器(控制器和MVC模式一樣),該控制器查詢數據庫並生成一個響應,告訴用戶名是否存在。下面的代碼:

$.validator.addMethod("username_available", function(value, element) { 
    $.ajax({ 
     url: MyPostURL, 
     type: "POST", 
     dataType: "html", 
     data: ({username: jQuery.trim($("#username").val()), 
       }), 
     success: function(data) { 
      if (data == "True") 
       return true; // Available 
      else 
       return false; // Already exists, not available 
     } 
    }) 
}, "Username not available."); 

沒有,如果是外地可用,錯誤消息「 用戶名不可用」事情一直顯示。

MyPostURL響應是O.K.我做了一些調試,放置了一些警報(),結果很有意義。我確信控制器回顯而不是返回。

據我所知,在方法的邏輯似乎O.K.,所以我必須失去了一些東西。

任何人都可以在此提供一些線索?

T.I.A.

回答

3

$.ajax調用是異步這樣你的驗證返回之前的AJAX調用完成;您的成功處理程序內return聲明不會從你的驗證器返回一個值,它只是從成功處理程序返回值,沒有人關心你的成功處理程序返回的內容。您的驗證器回調函數根本不返回任何值,驗證器引擎將缺少值解釋爲「false」。

你可以使$.ajax同步:

$.validator.addMethod("username_available", function(value, element) { 
    var is_valid = false; 
    $.ajax({ 
     // as before... 
     async: false, 
     success: function(data) { 
      is_valid = data == 'True'; 
     } 
    }); 
    return is_valid; 
}, "Username not available."); 

但直到$.ajax調用完成,將鎖住瀏覽器。雖然這可能是簡單的「用戶名可用」驗證。

+0

工作就像一個魅力!我的驗證器根本沒有任何回報!坦克爲您的答案和整個解釋,欣賞它。 – romeroqj

相關問題