月度归档:2011年09月

onsubmit和ajax的异步

    早上乐乐在Q上问我在一个表单的onsumbit事件处理js中如果js里需要用ajax来判断一些状态的话,form会因为ajax的异步执行而先执行ajax后面的代码导致ajax的判断生效不了,表单判断状态就会不准确。

代码类似这样:

<form method=”post” action=”?” onSubmit=”return demo();”>
<input type=”submit” value=”submit”>
</form>
<script type=”text/javascript”>
function demo(){
$.ajax({
url:’/welcome/ajaxsubmit’,
type:’POST’,
dataType:’text’,
success:function(data){
alert(data);
alert(‘111111111’);
},
error:function(){
alert(‘fdsafdsa’);
}
});
alert(‘222222222’);
return false;
}
</script>

alert(‘222222222’);会先执行,然后才是alert(‘111111111’);

产生问题的原因就是ajax本身就是一个异步技术,但是我们可以强制它用同步的方式执行,解决办法就是在ajax请求的参数中添加一个参数,关闭异步。

async:false这样就可以了。