model代碼以下:javascript
remote對應的action以下:java
view代碼以下:jquery
單擊按鈕時,執行以下動做ajax
當點擊按鈕時,咱們發現,雖而後臺action驗證失敗,但 仍是執行返回true,目測是由於remote驗證採用的ajax 異步方式,並不等待remote的執行驗證,因此返回了true。異步
<script type="text/javascript"> var intervalPending = null; function remoteCheck() { var validator = $("form").data("validator"); alert(validator.pendingRequest); if (validator.pendingRequest == 0) { // requests are done // clear interval clearInterval(intervalPending); // re-enable our "submit" button // "click" the hidden button if ($("form").valid()) { alert(111); } } // we will try again after the interval passes } $(function () { $("#test").click(function () { intervalPending = setInterval('remoteCheck()', 1000); }) }) </script>
咱們須要解決的問題是,在執行$("form").valid()時等待remote的執行。async
思路以下:spa
$("form").data("validator").pendingRequest
來肯定remote是否執行完畢(remote所有執行完畢以後,$("form").data("validator").pendingRequest的值爲0)3d
二、建立一個計時器,code
intervalPending = setInterval('remoteCheck()', 1000);
每隔一秒鐘就判斷一次remote的執行狀況,是否已經所有執行完畢,當執行完畢以後,清除計時器,執行咱們本身的動做,不然,繼續循環判判斷。orm