一个Ajax的问题,如下例子,是用dwr做的,我用其他AJAX技术也做过,出现同样问题,就是第一次进入函数时,现在已经是登陆状态,
返回值info也是true,但alert()出来却是    :num1true  num2false,而你重复执行该函数时,结果是 num1true num2true,
var result=false;
function isLogin(){
AddHint.getSessionUser(function(info){
             if(info==false){
alert('您未登录或者登陆时间过长,请先登录再操作.');
result="false";
                                        alert("num1:"+result);
}else{
result="true";
                                        alert("num1:"+result);
}
}
);
                alert("num2:"+result);
return result
}

解决方案 »

  1.   

    还有更奇怪的问题,
    我在页面中这样调用的: if(isLogin()==false){
    alert('您未登录或者登陆时间过长,请先登录再操作.');
    return false;
    }
    像上面的函数,里面有alert的时候,第一次登陆时,
    不弹出alert('您未登录或者登陆时间过长,请先登录再操作.');
    而当我把上面函数中的alert都去掉的时,第一次登陆,却会弹出alert('您未登录或者登陆时间过长,请先登录再操作.');
      

  2.   

    不好意思,写上来时写错了。是result=false;而不是result="false";
    问题依然,继续,,
      

  3.   

    var result=false;
        function isLogin(){
            AddHint.getSessionUser(function(info){
                    alert(info);
                    alert(typeof info);
                    if(info==false){
                    alert('您未登录或者登陆时间过长,请先登录再操作.');
                        result="false";
                                            alert("num1:"+result);
                    }else{
                        result="true";
                                            alert("num1:"+result);
                    }
                }
            );
                    alert("num2:"+result);
            return result
        }
      

  4.   

    alert("info:"+info); 
    alert("type:"+typeof   info); 
    登陆后
    alert()出
    info:true
    type:boolean
      

  5.   

    这个问题在于回调函数内部不能修改外部变量的值,如下我简单的做了一个小例子:
    Java文件:public class Test {
    public boolean hello(int input){
    System.out.println("Hello");
    if((input%2)==0)
    return true;
    else
    return false;
    }
    }页面文件:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
      <script type='text/javascript' src='dwr/interface/Test.js'></script>
      <script type='text/javascript' src='dwr/engine.js'></script>
      <script type='text/javascript' src='dwr/util.js'></script>
    <script>
    function fclick(){
    var n=dwr.util.getValue("num");
    var v="hello";
    Test.hello(n,function(flag){
    //alert(flag);
    v=flag;
    alert("inner :"+v);
    });
    alert("outer :"+v);
    }
    </script>
    </head>
    <body>
    <input type="text" name="num"/>
    <input type="button" value="click" onclick="fclick()"/>
    </body>
    </html>但是输出的是首先alert出来“inner :true”或者“inner :false”,然后alert出来“outer :hello”。建议楼主还是后续处理放到回调函数里面吧。至于为什么这样,楼主可以看看dwr的源代码,应该可以找到原因
      

  6.   

    因为没什么好的解决放案.我决定把提交按钮改为button调用JS来提交表单:
    改代码为:效果还不错
    function isLogin(){
    AddHint.getSessionUser(function(info){
                 if(info==false){
    alert('您未登录或者登陆时间过长,请先登录再操作.');
    return;
    }else{
    isHasMoney($F('tmoney'));
    }
    }
    );
    }
    function isHasMoney(tmoney){
    AddHint.isMoneyEnought(tmoney,function(info){
    if(info==false){
    alert('对不起,你的金额不足!');
    return;
    }else{
    document.forms[0].submit();
    }
    });
    }