采用DWR获取java程序的值,然后我要用获取的值给javascript变量赋值,但是很郁闷,居然要先执行alert语句才能正确显示赋值的结果,如果javascript代码如下:(其中remote.isRepeat是调用java类)
var repeatFlag = 0;
remote.isRepeat("hell", function(msg) {
if (msg > 0) {
repeatFlag = 1;
}
});
alert("hahaha!");
alert(repeatFlag);
那么alert(repeatFlag)的时候就能得到赋值后的正确结果1而不是原始的0
但是如果吧前面的那一句alert("hahaha!");去掉,则alert(repeatFlag)的结果就是原始0,根本没有被赋值(当然赋值的条件是肯定满足的情况下)查阅了一下网上资料,都说是DWR同步和异步的问题,要加上dwr.engine.setAsync(false);,但我没看懂,http://blog.csdn.net/zxkevin1989/article/details/7282315 这里就有提到,请问就我如下的代码而言,问题究竟出在哪里呢?

解决方案 »

  1.   

    应该跟alert("hahaha!");没撒关系。对dwr不太懂。remote.isRepeat是你的java类还是dwr的api
      

  2.   

    本帖最后由 showbo 于 2013-07-23 22:25:59 编辑
      

  3.   


    但现在就是和这个有关,我看到网上其他人也问到类似的问题.remote.isRepeat是DWR调用java类的方法,这个方法执行正常的,否则就不会有那个返回的msg了,那个返回的msg也是对的,
      

  4.   


    你说的很清楚啊!我大概明白了,就是这个同步的设置究竟要加在那个位置?我试过都不成功,我在研究一下DWR的文档吧,谢谢
      

  5.   


    但现在就是和这个有关,我看到网上其他人也问到类似的问题.remote.isRepeat是DWR调用java类的方法,这个方法执行正常的,否则就不会有那个返回的msg了,那个返回的msg也是对的,
    我只在dwr的网站看到:
    Remote.method(params, callMetaData);
      

  6.   

    加上这一句即可 dwr.engine.setAsync(false);具体如下
    dwr.engine.setAsync(false);//加上这句之后,alert("hahaha!");那句可以去掉了,可正常赋值成功,否则没这句的话非要加上alert("hahaha!");才能让repeatFlag = 1;赋值成功
    var repeatFlag = 0;
    remote.isRepeat("hell",
    function(msg) {
        if (msg > 0) {
            repeatFlag = 1;
        }
    });
    //alert("hahaha!");//现在这句可以去掉了!
    alert(repeatFlag);
      

  7.   

    function(msg) {
        if (msg > 0) {
            repeatFlag = 1;
        }
    }回调函数中去处理