2010-08-06 102 views
1

我想驗證表單使用AJAX調用來檢查可用的庫存。如果庫存檢查有錯誤,它會返回一個味精,如果沒有,表單應該提交。jQuery AJAX驗證表格

我有以下代碼:

$("form[id*='distributor_']").submit(function(){ 
    return checkAvailableInventory($(this)); 
}); 

function checkAvailableInventory(form) { 
    $.ajax({ 
     url: "/ajax/quantity.php?" + form.serialize(), 
     success: function(msg) { 
      if (msg) { 
       alert(msg); 
       return false; 
      } else { 
       return true; 
      } 
     } 
    }); 
} 

我懷疑,出現此問題是由於AJAX的異步性和成功:條款不火,直到好後checkAvailableInventory()的生命週期完成。

有沒有人有解決這個問題的建議?我見過一些使用超時的人的例子,但這似乎是解決可能出現問題的解決方法。

回答

2

一個選項是使呼叫非異步。您可以將async屬性設置爲false。這是默認情況下。不知道多長時間的調用,因爲它可以鎖定瀏覽器,直到它完成。

編輯:另一種選擇是從您的方法,使ajax調用返回false。然後在成功方法中,當它到達那裏時,您可以從表單中解除綁定提交功能,然後調用form.submit,只需將它發佈到通常沒有驗證的地方即可。

+0

OMG!太簡單。我無法相信我之前沒有想過這件事。它工作完美。謝謝! – gurun8 2010-08-06 15:51:58

+0

沒問題。樂意效勞。出於好奇,你最終選擇了哪個選項? – spinon 2010-08-06 16:59:48

0

你可能想看看jQuery validate插件!它使用起來非常簡單,並且非常好地處理遠程驗證。

插件:http://bassistance.de/jquery-plugins/jquery-plugin-validation/ 遠程驗證文檔:http://docs.jquery.com/Plugins/Validation/Methods/remote#options

+0

感謝您的建議。只是不需要它。 – gurun8 2010-08-06 15:51:02

+0

不用擔心!我希望你沒有去async = false。這將在ajax調用期間鎖定您的客戶端瀏覽器,這絕不是一件好事!但編輯中的解決方案似乎確定。 – Patricia 2010-08-06 16:06:20