以前一直用的是dwr2.x系列,因为js是同步处理机制,dwr默认是异步处理机制,所以通常的做法都是人为设置为同步:DWREngine.setAsync(false);这样就可以在得到返回值程序往下走,如果一个js函数中有多个需要从后台直接得到返回值,我们可以设置多个同步,在2.x里面是不存在问题的但是在3.0里面,我设置了多个同步,依然会有返回值为undefined的情况,但是在函数的任意位置加上个alert,就能正常获得返回值,dwr3.0的说明文档网上也很少,很是不解~
js函数代码如下:
function loadCheckbox()
{ var zxjl = <%=session.getAttribute("zxrwid")%>;
dwr.engine.setAsync(false);
checkboxAJAX.GetCheckBoxHtml(zxjl,function(data){innerH=data;});
dwr.engine.setAsync(true);
if(typeof innerH =='undefined')
{
innerH='';
}

dwr.engine.setAsync(false);
checkboxAJAX.GetHiddenValues('bm',function(data){xxu=data;});
dwr.engine.setAsync(true);




dwr.engine.setAsync(false);
checkboxAJAX.GetHiddenValues('zxrwmcsel',function(data){zxrwmcsel=data;});
dwr.engine.setAsync(true);


var str;
//alert(1);
if(xxu!=null&&zxrwmcsel!=null)
{
//alert("here");
str= writeChckboxList ('id','zxrwmcsel',xxu,zxrwmcsel,innerH,'130px','150px','50px');
}
else
{
str= writeChckboxList('id','zxrwmcsel','','',innerH,'130px','150px','50px');
}

document.getElementById("bm").innerHTML = str;  }

解决方案 »

  1.   

    嗯,其实 2.0 运用的时候,也会有类似的状况,你 alert的时候,其实是为他异步争取了时间。如果方法执行必须有先后顺序的话,那把异步调用的方法。增加需要调用的下一个方法作为参数。
      

  2.   

    希望之篇文章对你有点帮助:http://blog.csdn.net/youjianbo_han_87/archive/2008/09/03/2872632.aspx
      

  3.   

    主要是有3个返回值我想直接获取赋给全局变量,在此之前已经设置了同步。。还有个奇怪的问题,总是第二个全局变量会是undefined,改变顺序之后依然是第二个,在回调函数里面已经成功赋值给全局变量,但是出了checkboxAJAX.GetHiddenValues('bm',function(data){xxu=data;}); 
    alert(xxu);就会变成undefined~
      

  4.   


    我是不大信他的同步的,都是自己按照真实需要的顺序来调用方法的。你alert只是让他获得了取值的时间,中断了一下。
      

  5.   

    我用2.0的时候也出现需要alert,之后才能正常出现效果的事,但是不是在dwr.engine.setAsync(false);应该加到什么地方
      

  6.   

      dwr.engine.setAsync = function(async) {
        dwr.engine._async = false;
      };