engine.js Functions
时间:2006-12-20 来源:softiger
engine.js Functions
engine.js对DWR非常重要,因为它是用来转换来至动态生成的接口的javascript函数调用的,所以只要用到DWR的地方就需要它。
The engine.js file
每一个页面都需要下面这些语句来引入主DWR引擎。
使用选项
下面这些选项可以通过 DWREngine.setX() 函数来设置全局属性。例如:
DWREngine.setTimeout(1000);
或者在单次调用级别上(假设Remote被DWR暴露出来了):
Remote.singleMethod(params, { callback:function(data) { ... }, timeout:2000 });
远程调用可以批量执行来减少反应时间。endBatch 函数中可以设置选项。
DWREngine.beginBatch(); Remote.methodInBatch1(params, callback1); Remote.methodInBatch2(params, callback2); DWREngine.endBatch({ timeout:3000 });
可以混合这几种方式,那样的话单次调用或者批量调用级别上的设置可以复写全局设置(就像你希望的那样)。当你在一个批量处理中多次设置了某个选项,DWR会保留最后一个。所以如果 Remote.singleMethod() 例子在batch里面,DWR会使用3000ms做为超时的时间。
callback和exceptionHandler两个选项只能在单次调用中使用,不能用于批量调用。
preHook和postHook选项两个选项是可添加的,就是说你可以为每一次调用添加多个hook。全局的preHook会在批量调用和单次调用之前被调用。同样全局的postHook会在单次调用和批量调用之后被调用。
如果以上叙述让你感到混乱,不用担心。DWR的的设计往往和你想象中的一样,所以其实这些并不复杂。
选项索引
下面是可用选项列表。
Option | Global | Batch | Call | Summary |
---|---|---|---|---|
async | 1.1 | 1.1 | 1.1 | 设置是否为异步调用,不推荐同步调用 |
headers | 2.0 | 2.0 | 2.0 | 在XHR调用中加入额外的头信息 |
parameters | 2.0 | 2.0 | 2.0 | 可以通过Meta-datarequest.getParameter()取得的元数据 |
httpMethod | 2.0 | 2.0 | 2.0 | 选择GET或者POST. 1.x中叫'verb' |
rpcType | 2.0 | 2.0 | 2.0 | 选择是使用xhr, iframe或者script-tag来实现远程调用. 1.x中叫'method' |
skipBatch | 1.0* | 2.1? | - |
某个调用是否应该设置为batch中的一部分或者直接的。这个选项和上面都有些不同。 *没有setSkipBatch()方法,批量调用是通过beginBatch()和endBatch()来控制的。 |
timeout | 1.0 | 1.1 | 1.1 | 设定超时时长,单位ms |
处理器(Handler)
Option | Global | Batch | Call | Summary |
---|---|---|---|---|
errorHandler | 1.0 | 1.1 | 1.1 | 当出了什么问题时的动作。1.x中还包括服务端的异常。从2.0开始服务端异常通过'exceptionHandler'处理 |
warningHandler | 1.0 | 2.0 | 2.0 | 当因为浏览器的bug引起问题时的动作,所以默认这个设置为null(关闭) |
textHtmlHandler | 2.0 | 2.0 | 2.0 | 当得到不正常的text/html页面时的动作(通常表示超时) |
调用处理器(Call Handler) (注册到单独调用上的,而不是batch中的所有调用)
Option | Global | Batch | Call | Summary |
---|---|---|---|---|
callback | - | - | 1.0 | 调用成功以后的要执行的回调函数,应该只有一个参数:远程调用得到的数据 |
exceptionHandler | - | - | 2.0 | 远程调用失败的动作,一般是服务端异常或者数据转换问题。 |
Hooks (一个batch中可以注册多个hook)
Option | Global | Batch | Call | Summary |
---|---|---|---|---|
preHook | 1.0 | 1.1 | 1.1 | 远程调用前执行的函数 |
postHook | 1.0 | 1.1 | 1.1 | 远程调用后执行的函数 |
全局选项(在单次调用或者批量调用中不可用)
Option | Global | Batch | Call | Summary |
---|---|---|---|---|
ordered | 1.0 | - | - | DWR是否支持顺序调用 |
pollType | 2.0 | - | - | 选择xhr或者iframe的反转Ajax |
reverseAjax | 2.0 | - | - | 是否查找inbound调用 |
废弃的选项
Option | Global | Batch | Call | Summary |
---|---|---|---|---|
verb | 1.0 | 1.1 | 1.1 | 2.0废弃。使用'httpMethod'代替 |
method | 1.0 | 1.1 | 1.1 | 2.0废弃。使用'rpcType'代替 |
将来的
Option | Global | Batch | Call | Summary |
---|---|---|---|---|
onBackButton | 2.1? | 2.1? | - | 用户按了back按钮后的动作 |
onForwardButton | 2.1? | 2.1? | - | 用户按了forward按钮的动作 |
保证的责任
DWR的目的是让你确切的知道所有调用的动作。知道了浏览器存在的bug,这是可以做到了。
如果你设置了callback, exceptionHandler, errorHandler, warningHandler 和 textHtmlHandler,DWR就应该 总是 为每一个请求提供响应。
- Call Batching
- Call Ordering
- Errors, Warnings and Timeouts
- Remoting Hooks
- Remoting Options