2011-07-06 38 views
1

因此,我有一個自定義驗證程序,可以根據我的可接受郵政編碼數據庫檢查輸入的郵政編碼。jQuery Validator無法使用ajax自定義方法提交

我的自定義方法如下:

jQuery.validator.addMethod("validZip", function(value, element){ 
    var _id = $(element).attr("id"); 
    $.post(
     '/xpress/wp-admin/admin-ajax.php', 
     {action:"test_checkZip", zip:value}, 
     function(response){ 
      if (result == 0){ 
       return false; 
      } else { 
       return true; 
      } 
     } 
    ); 
}, '*'); 

的問題,我認爲,這是因爲Ajax是非阻塞的請求的延遲犯規及時返回真/假結果的驗證器它得到認可。

只要結果爲真,就無法隱藏錯誤消息,並且表單無法提交。

我已經能夠通過顯式隱藏錯誤元素來隱藏返回真代碼塊中的錯誤消息。該錯誤消息確實隱藏,但是,由於自定義方法未能返回true,因此該窗體仍然返回false。

我做錯了什麼?我怎樣才能解決這個問題?

非常感謝。

回答

1

你可以使用使用$.ajax

jQuery.validator.addMethod("validZip", function(value, element){ 
    var _id = $(element).attr("id"); 
    var return_val = null; 
    $.ajax({ 
     url: '/xpress/wp-admin/admin-ajax.php', 
     type: 'post', 
     data: {action:"test_checkZip", zip:value}, 
     async: false, //This does the trick 
     success: function(response){ 
      if (result == 0){ 
       return_val = false; 
      } else { 
       return_val = true; 
      } 
     } 
    }); 
    return return_val; 
}, '*'); 

希望這有助於同步recuest。乾杯

+0

別忘了'type:'POST'' – jerluc

+0

@jerluc謝謝,你是對的 –

-1

如果您使用$.ajax(),您可以指定POST同步而不是異步。

$.ajax({ 
    url: '/xpress/wp-admin/admin-ajax.php', 
    type: 'POST', 
    data: {action:"test_checkZip", zip:value}, 
    async: false, 
    success: function(response){ 
     // Process response.. 
    } 
}); 
相關問題