DWR的同步与异步

20 篇文章 0 订阅

AJAX是用来实现异步调用的,但有些情况下,我们必须要实现同步效果,避免有关联的方法调用顺序被打乱。比如,一个编辑文章的页面有两个select下拉选框(id分别为s1和s2),显示该篇文章所在的父分类和子分类。子分类的内容根据父分类的选择发生变化。会有如下三个方法调用(每个function的具体代码省略,不在讨论范围):

    <script type="text/javascript">

     //初始化第一个下拉框(这篇文章的父分类)
      initselect(document.getElementById('s1'),'<s:property value="news.parentType"/>');

     //根据第一个下拉框选中内容到数据库中查询第二个下拉框的子分类数据

       DWRNEWSTYPE.getTypeIdByParentType(document.getElementById('s1').value,changeS2Option);

    //初始化第二个下拉框(这篇文章的子分类)
     initselect(document.getElementById('s2'),'<s:property value="news.typeId"/>');

</script>

这段代码嵌入到jsp页面代码中执行,会发生s2原本的子分类并没有被选中(第三个方法没有被执行的感觉),但是选项内容数据确实查询出来的情况。这是因为,第三个方法在dwr执行之前还没返回结果,就已经执行完毕,ajax异步调用也会导致页面出现的结果有很大差别。为了避免这种情况,我们需要在这段代码前设置为同步,最后再改成异步的。

    <script type="text/javascript">

DWREngine.setAsync(false); //设置是否异步传输为false,即同步

     //初始化第一个下拉框(这篇文章的父分类)
      initselect(document.getElementById('s1'),'<s:property value="news.parentType"/>');

     //根据第一个下拉框选中内容到数据库中查询第二个下拉框的子分类数据

       DWRNEWSTYPE.getTypeIdByParentType(document.getElementById('s1').value,changeS2Option);

    //初始化第二个下拉框(这篇文章的子分类)
     initselect(document.getElementById('s2'),'<s:property value="news.typeId"/>');

DWREngine.setAsync(true);   //再设置是否异步传输为true,即异步

</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值