DWR之其他概念:engine.js文件
----------
在范例程序中,我们引入了文件engine.js。 该文件是DWR客户端的核心。 这是一段javascript代码,用于把来自于动态生成的代理存根的调用组装为服务器上真正的对象。engine.js会输出一个DWREngine对象。该对象有很多选项,可以控制DWR的工作机制。如:
每个选项可以通过
三种方式来设置。首先,可以
全局性设置,这样的话,会影响DWR发出的每一个调用。为实现这一点,
应该调用一个setter方法。例如,为全局性设置timeout选项,可以调用方法:
有些选项还需要注意一件事情,也就是 ordered、pollType和reverseAjax选项不能应用到单个调用,但是其他选项可以。
----------
在范例程序中,我们引入了文件engine.js。 该文件是DWR客户端的核心。 这是一段javascript代码,用于把来自于动态生成的代理存根的调用组装为服务器上真正的对象。engine.js会输出一个DWREngine对象。该对象有很多选项,可以控制DWR的工作机制。如:
DWREngine的选项
选项 | 说明 |
---|---|
async | 用于指定通过DWR所生成的Ajax调用是异步的还是同步的,设为true时,在调用返回之前会阻塞浏览器响应用户请求。 |
headers | 允许在Ajax调用中附加额外的信息头。 |
parameters | 允许在请求中设置请求参数,在服务器端通常采用request.getParameter()方法获取 |
httpMethod | 设置HTTP方法(通常是GET或POST) |
rpcType | DWR可以使用多种方法来实现Ajax,包括典型的XMLHttpRequest对象、基于iFrames的方法,或者基于动态生成<script>标签的方法。 |
timeout | 以毫秒为单位,设置请求被撤销的时间。 |
errorHandler | 允许设置一个javascript函数,以便在客户端出错时调用 |
warningHandler | 该选项在默认情况下不使用。采取与errorHandler相同的方式,允许处理不会让应用程序崩溃的任何错误。这种错误通常是由浏览器错误引起的。 |
textHtmlHandler | 可以设置当从服务器返回的响应不是正确的DWR所创建的响应时,需要执行的javascript代码。最经常出现的情况是会话超时,但是也可能 是与安全相关的问题,或者其他原因 |
preHook | 在发出Ajax调用之前所执行的函数。可以与preHook一起应用面向切面的方法学 |
postHook | 类似于preHook,唯一区别是在本调用返回之后,在回调函数调用之前执行 |
ordered | 这个参数指定DWR是否应该提供多个调用的有序执行。对请求进行排序,每次只发送一个请求,该请求返回后再发送下一个请求。 请注意,使用这个参数会降低应用程序的性能,甚至会导致应用程序挂起。最好在第一次涉及多个调用的执行顺序时重构自己的应用程序, 从而避免使用它。 |
pollType | 当使用反向Ajax时,这个参数指定是使用XMLHttpRequest方法还是iFrame方法 |
reverseAjax | 这个参数指定DWR是否应该对每个出站请求(outbound request)使用inbound调用。 |
DWREngine.setTimeout()
其次,可以在
批处理层次设置(作为参数传入endBatch()函数)。再次,可以在
调用层次设置,作为参数传递给方法本身,非常类似于传递回调函数。而且,
如果有全局性设置,调用层次的设置会被覆盖。两个例外是preHook和postHook选项,这是另外添加的,意味着每个调用或者每个批处理可以有多个选项。同时,可以按照期望顺序进行调用,这意味着首先执行全局性设置,接着是批处理层次设置,最后是调用层次设置。
有些选项还需要注意一件事情,也就是 ordered、pollType和reverseAjax选项不能应用到单个调用,但是其他选项可以。
调用批处理
可以把多个调用组织成一个批处理,一次性执行多个调用。这样做可以降低所需的网络流量,因此提升应用程序的响应能力。为完成批处理,只需要实现如下代码:
DWREngine.beginBatch();
BatchCallClass.method1(testCallBatchingCallback1);
BatchCallClass.method2(testCallBatchingCallback2);
MathDelegate.multiply(8,4,testCallBatchingCallback3);
DWREngine.endBatch();
当发出endBatch()调用时,DWR会获取所发出的所有方法调用,并通过一个Ajax请求发送。然后,DWR负责调用所有批处理请求的回调函数。
关于util.js
注意:在使用反向Ajax的时候,util.js是必须包含的,跟engine.js一样的包含方式。