一个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
}
返回值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
}
我在页面中这样调用的: if(isLogin()==false){
alert('您未登录或者登陆时间过长,请先登录再操作.');
return false;
}
像上面的函数,里面有alert的时候,第一次登陆时,
不弹出alert('您未登录或者登陆时间过长,请先登录再操作.');
而当我把上面函数中的alert都去掉的时,第一次登陆,却会弹出alert('您未登录或者登陆时间过长,请先登录再操作.');
问题依然,继续,,
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
}
alert("type:"+typeof info);
登陆后
alert()出
info:true
type:boolean
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的源代码,应该可以找到原因
改代码为:效果还不错
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();
}
});
}