DWR的engine.js

engine.js对于DWR非常重要,engine.js和util.js相当于DWR的两个静态函数库,使用DWR时engine.js必须导入,util.js可以简化DOM操作选择导入,Ajax通常是异步调用,因此发送请求的顺序与返回的顺序并不一定一致,要想使其一致可以:

dwr.engine.setOrdered(true);

 这样的话,在旧的请求返回之前,DWR不会发送新的请求,所以会导致性能降低

使用JSON回调时每次都要指定超时时长,会很繁琐,为了避免重复指定可以通过指定全局超时时长:

dwr.engine.setTimeout(5000);

 也可以指定全局的Hook函数:

//设置全局的调用前Hook函数
 dwr.engine.setPreHook(preFunction);
 //设置全局的调用后Hook函数
 dwr.engine.setPostHook(postFunction);

 也可设置全局处理函数:

 //设置全局的错误处理函数
 dwr.engine.setErrorHandler(errorFunction());
 //设置全局的警告处理函数
 dwr.engine.setWarningHandler(warnFunction());
 //设置全局的异常处理函数
 dwr.engine.setExceptionHandler(exceptFunction());
 //设置全局的内容异常处理函数
 dwr.engine.setTextHtmlHandler(textHtFunction());

 也可以指定全局的是否采用异步方式:默认是true:

dwr.engine.setAsync(true|false);

 指定全局的请求方法:

dwr.engine.setHttpMethod(POST|GET);

 指定全局的远程调用的方式:

dwr.engine.setRpcType(XMLHttpRequest|Iframe|ScriptTag);

 如果浏览器禁用ActiveX则不可用XMLHttpRequest,不过通常DWR会智能选择

如果既指定了全局又在单次调用指定了则全局会被覆盖

为了避免频繁多次调用服务器方法,DWR提供了批处理功能,当开启批处理功能时发送的请求不会立即发送到服务器,都会在等待队列中直到调用dwr.engine.endBatch()方法之后,DWR会通过一次交互来完成全部调用,不可在批处理时指定同步调用,也不能单独设置hook、timeouts等选项:

dwr.engine.beginBatch();
 hello.sendMessage("wang",callb1);
 hello.hello("li",call2);
 dwr.engine.endBatch({
	 timeout:3000,
	 errorHandler:function(msg){alert(msg);}
 });

猜你喜欢

转载自betterthisworld.iteye.com/blog/2074644
dwr