DWR的engine.js引擎属性及调用
在DWR中,engine.js是用来转换动态生成接口的JavaScript函数,它是DWR的工作引擎,所以一个引用DWR应用的页面都要使用它。
可以通过dwr.engine.setX()函数来设置全局属性。例如:
提示:如果把一些远程调用放在一起执行也会产生一些影响,例如不能在batch里执行同步调用。所有的元数据选项,例如hooks、timeout、errorHandler都是batch级别的,而不是单次调用级别上的,所以如果一个batch中有两个调用设置了不同的超时,除了最后一个起作用,其他的设置都被忽略。
在DWR中有一些选项用来控制远程调用的处理方式。
dwr.engine.setAsync(flag)该选项指定XHR是否为异步调用,默认为true。如果使用的是IFrame或者ScriptTag,这一选项将被忽略。一般来说把它设置为false会使浏览器运行变慢。设置全局同步机制的方法为:
dwr.engine.beginBatch();Remote.methodInBatch1(params, callback1);Remote.methodInBatch2(params, callback2);dwr.engine.endBatch({verb: "GET"});处理器及回调处理器的属性选项说明errorHandler当出现错误时的动作。服务器端的异常通过exceptionHandler来处理。warningHandler由于浏览器的bug引起问题时的动作,默认值设置为null(关闭)。textHtmlHandler当得到不正常的text/html页面时的动作(通常表示超时)。callback调用成功以后的要执行的回调函数,应该只有一个参数:远程调用得到的数据。exceptionHandler远程调用失败的动作,一般是服务器端异常或者数据转换问题。如果DWR远程调用失败,就会调用错误和警告handler并传递错误消息。可以用在alert()窗口或状态栏中来显示错误信息。也可以使用dwr.engine.setErrorHandler(function)来改变错误处理函数,同样通过dwr.engine.setWarningHandler(function)来改变警告处理方式。
Hooks的属性选项说明preHook远程调用前执行的函数。postHook远程调用后执行的函数。可以通过调用dwr.engine.setPreHook(function)和dwr.engine.setPostHook(function)来设置远程Hooks,如果想在DWR调用之前显示一个提示,可以设置pre-hooks函数。它将会被调用,但是没有参数传递到这个函数。为防止一些按钮在调用期间被多次单击,可以使用一些按钮在调用期间不可用,可以应用pre-hooks这一功能。pre-hooks和post-hooks一起使用来逆转pre-hooks产生的一些改变。
全局选项选项说明orderedDWR是否支持顺序调用。pollType选择xhr或iframe的反转Ajax。reverseAjax是否查找inbound调用。onBackButton用户按了back按钮后的动作。onForwardButton用户按了forward按钮的动作。因为Ajax一般是异步调用,所以远程调用不会按照调用时发送的顺序返回。可通过用dwr.engine.setOrdered(boolean)来设置返回的结果严格按照发送时的顺序返回。DWR在上一个请求安全返回后才会发送下一个请求。DWR的默认值为false,表示不能保证远程调用不会按照调用时发送的顺序返回。
提示:把这个属性的值设置为true,会减慢应用程序的运行,如果一个消息丢失。浏览器就不会再响应,所以在使用这一功能之前需要综合考虑。