//使用dwr调用后台方法得到数据
function getActive(startDate,startTime){
var result="";
activeBS.searchActive(
startDate,
startTime,
<%=personId%>,
function(datas){
//datas后台是一个list,如果有数据,只有一笔
for(var i=0; i < datas.length; i++){
var id = datas[i][0];
var name = datas[i][1];
var startDate = datas[i][2];
var startTime = datas[i][3]; alert(id+","+name+","+startDate+","+startTime);
result=id+","+name+","+startDate+","+startTime;
}
}
);
return result;
}
在下面的循环里面会调用getActive()方法,并得到返回值填充到字符串wStr中。
但上面虽然alert(id+","+name+","+startDate+","+startTime);能够打印出值来,但result并没有改变,还是""..不清楚这是什么什么原因。
for(var x=0;x<8;x++){
wStr+="<tr><td>"+(x+8)+":00</td><td><a href='a' onMouseOver='javascript:sh(event,1)'>"+getActive('20090323',(x+8)+":00")+"</a></td>";
wStr+="</tr>";
}

解决方案 »

  1.   

    function(datas)在接收到服务端返回数据后才被回调
      

  2.   


    但是,我的alert(id+","+name+","+startDate+","+startTime);已经打印出值来了而最后返回的result还是"";
      

  3.   


    确实很奇怪
    如果alert(id+","+name+","+startDate+","+startTime);那么                alert(id+","+name+","+startDate+","+startTime);
                    result=id+","+name+","+startDate+","+startTime;
                      alert(result);
    看看是不是result=""
      

  4.   

    步调不一致。请设置DWR引擎同步。
      

  5.   


    就是这个问题。我在for循环上加上这句就可以了。
    //设置为同步方式,以便DWR依次发出下列请求
    dwr.engine.setAsync(false);dwr.engine.setAsync(false);
    for(var x=0;x<8;x++){
                wStr+="<tr><td>"+(x+8)+":00</td><td><a href='a' onMouseOver='javascript:sh(event,1)'>"+getActive('20090323',(x+8)+":00")+"</a></td>";
                wStr+="</tr>";    
            }