form 表单提交被拦截的问题处理方法
异步ajax提交数据到服务器处理信息,处理成功后将返回的数据装载到对应界面的表单隐藏域中,然后再使用 $(document.body).append($form); $form.submit(); 提交表单,此时遇到谷歌、IE等浏览器拦截表单提交后的URL新窗口,思考了很久,终于找到了解决办法:
以下内容转载自http://hezlh.blog.163.com/blog/static/1781091152013227101559654/
一般情况下用 js 或 jquery 的 submit 方法提交 form 表单是不会被浏览器拦截的,但是发现异步的情况下用 js 提交 form 表单就会被浏览器拦截,这样就对功能的实现带来了很多的麻烦。网上看了好多都是同样的问题,解决办法都不是很理想,下面来详细分析下这个问题。
既然是在 ajax 中使用表单提交,肯定是需要 ajax 返回结果以后确定一个最终状态才能决定是否要提交表单。而ajax又是异步返回结果的,所以在返回结果后再决定提交表单,肯定会被浏览器拦截。
那我们就想,jQuery ajax 有没有同步的使用方法呢?答案是有的,在调用 ajax 时添加 async: false 这个参数即可。试了后发现,咦,真的可以!
这个方法虽然是同步的,但是不违反这么使用的目的,如果 ajax 没有返回结果,当然也不能确定是否可以提交表单。在解决这个问题的时候,可能思路锁定在了 ajax 只能做异步的事,所以没有想到这样的解决办法。所以这个解决办法是有效的。