<!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就可以了。这什么情况。

解决方案 »

  1.   

    可能你的请求出错了, 跳到 error callback里了
      

  2.   

    $.ajax请求是需要时间的,还没返回值,你就运行了if(ajaxRes.flag=='m0')
    你添加了alert(ajaxRes.flag)起到延时阻止运行作用,此时ajax已经返回值了。所以你的代码应该是:
    success: function(msg){
                ajaxRes.flag = msg;
                if(ajaxRes.flag=='m0'){
                   alert('000');
                }else{
                   alert('111');
                }
            }
      

  3.   

    alert(ajaxRes.flag);//按你的写法,这里永远是true,但下面ajaxRes.flag的值就随ajax返回不同而不同了
        if(ajaxRes.flag=='m0'){
            alert('000');
        }else{
            alert('111');
        }
      

  4.   

    以上代码就是想阻止表单提交,不想用alert,最主要是用于开源的formvalidator。它也有这个问题。ajax里使了async:'false',不是异步了,这又是为什么。
      

  5.   

    应该是async:false