在使用
HTML5 setCustomValidity()方法[使用旧版浏览器的webshims库]之前,我有一个页面对AJAX进行验证,然后再继续下一页.
为了使这个工作,我在$.ajax()调用中将async选项设置为false,使其同步,阻止页面等待AJAX响应,否则表单在ajax调用返回之前提交,使验证无效.
<script> function validateEmailRegistered(input) { if (input.setCustomValidity === undefined) return; var err = 'Email address not found'; $.ajax({ url: 'email-is-registered.PHP',data: { email: input.value },async: false,success: function(data) { var ok = data=='true'; input.setCustomValidity(ok ? '' : err) } }); } </script> <form method="get" action="nextpage.PHP"> <input name="email" id="email" type="email" required onChange="validateEmailRegistered(this)"> <button type="submit">go</button> <form>
我看到async选项是不推荐使用的jQuery 1.8.
如何在没有异步选项的情况下实现此阻塞操作?
解决方法
http://bugs.jquery.com/ticket/11013#comment:40
The use of the Deferred/Promise functionality in synchronous ajax requests has been deprecated in 1.8. The $.ajax method with async: false is supported but you must use a callback parameter rather than a Promise method such as
.then
or.done
.
因此,如果您使用成功/完成/错误处理程序,您仍然可以使用async:false.更多信息在上面的jquery票.