日期:2014-05-16  浏览次数:20394 次

jquery的ajax验证,阻止表单提交问题

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<title>js test</title>
<script language="javascript" type="text/javascript" src="jquery.min.js"></script>
</head>
<body>
<script>
function ajaxRes(){};
ajaxRes.flag = true;
function aj(){
$.ajax({ 
type: "POST",
url: "test.php",
async:'false',
data: "",
success: function(msg){
ajaxRes.flag = msg;
alert(ajaxRes.flag);
}
});
//alert(ajaxRes.flag);
if(ajaxRes.flag=='m0'){
alert('000');
}else{
alert('111');
}
}
aj();
</script>
</body>
</html>


以上ajax无法修改ajaxRes.flag值,但加上标红的调试alert就可以了。这什么情况。

------解决方案--------------------
可能你的请求出错了, 跳到 error callback里了
------解决方案--------------------
$.ajax请求是需要时间的,还没返回值,你就运行了if(ajaxRes.flag=='m0')
你添加了alert(ajaxRes.flag)起到延时阻止运行作用,此时ajax已经返回值了。所以你的代码应该是:
success: function(msg){
            ajaxRes.flag = msg;
            if(ajaxRes.flag=='m0'){
               alert('000');
            }else{
               alert('111');
            }
        }
------解决方案--------------------
alert(ajaxRes.flag);//按你的写法,这里永远是true,但下面ajaxRes.flag的值就随ajax返回不同而不同了
    if(ajaxRes.flag=='m0'){
        alert('000');
    }else{
        alert('111');
    }
------解决方案--------------------
引用:
ajax里使了async:'false',不是异步了,这又是为什么。
应该是async:false