由于dwr异步产生的问题

嗯...这个问题不知道该怎么说,先说结论:采用

dwr.engine.setAsync(false);//强制同步

dwr.engine.setAsync(true);//强制异步

的方式使js的某一段在执行时进行同步,以此办法避免dwr回调方法产生的错误问题.

问题一开始是这样的,我们在正常执行js语句的过程中是按顺序执行的,但是如果采用dwr进行前后台逻辑的控制,有时候就需要用其特有的callbackfunction进行一些回调的操作,这时就容易产生回调时时间错乱的问题.实际中是这样的.

比如我们有两个输入框:,其中起点类型这个下拉列表控制着后面起点这个下拉列表的显示内容.用户单击该按钮进入界面后,会先对起点类型赋值,赋值时调用onselect事件,加载后面的起点下拉框的内容,所以正常的顺序是:1.起点类型赋值2.加载起点下拉框3.起点赋值.语句如下:

$('#startpointinpathadd').combobox('select', apoint);//赋值

$('#startpointtypeinpathadd').combobox({
			data: data, //获取要显示的json数据
			 valueField: 'CODE',
			 textField: 'NAME',
			height: fixHeight(),width: fixWidth(),
			onSelect: function(rec) {
				var typecode = rec.CODE;
				var deptcode = $("input[id = 'deptcode'] ").val();//用户权限码
				PathDwrUtil.getPointList(typecode,deptcode, function(data) {
					$('#startpointinpathadd').combobox({
						data: data, //获取要显示的json数据
						 valueField: 'CODE',
						 textField: 'NAME',
						height: fixHeight(),width: fixWidth()
					});
				});
			}
		});

$('#startpointinpathadd').combobox('select', apoint);//起点赋值

但是实际执行时的顺序却是132,因为这这个回调函数是在最后执行的,这就导致语句3select不到这个值,进而产生错误.那么错误的原因是什么呢?

我认为就是这个同步和异步的问题.因为js语句默认执行的是异步操作,因此在异步执行的时候,dwr发送请求给后台,后台在执行的过程中前台直接就继续下一步了,没有等待执行结束.为此,我们要在该语句执行的时候强制采用同步,等待调用完成,也即第二个下拉框的值被加载后再往下走,就不会出现有时候可以读取出来有时候读取不出来的事情了.

 

 

对于js中的先后执行问题,稍后更新,先记录(function(){})();
简写(......)();
第一对括号内是一个函数体(表达式),这对括号仅用于划定表达式的范围;
第二对括号内是一个操作符,表示立即执行上面的表达式;而第二对括号内的值(如果有的话),就是执行上面表达式所需要的参数(也分实参、形参)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值