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