日期:2014-05-16 浏览次数:20423 次
在DWR中,engine.js是用来转换动态生成接口的JavaScript函数,它是DWR的工作引擎,所以一个引用DWR应用的页面都要使用它。
<c:set var="base"> ${pageContext.request.scheme}:// ${pageContext.request.serverName}:${pageContext.request.serverPort} ${pageContext.servletContext.contextPath} </c:set> <script type="text/javascript" src="${base}/dwr/engine.js"></script>
可以通过dwr.engine.setX()函数来设置全局属性。例如:
dwr.engine.setTimeout(2000);
或者在单次调用级别上假设Remote被DWR暴露出来设置,例如:
Remote.singleMethod(params, { callback: function(data) { /* code */ }, timeout: 2000 });
选项 |
说明 |
async |
设置是否为异步调用。如果为true则为异步调用。 |
headers |
在XHR调用中加入额外的头信息。 |
parameters |
可以通过Meta-datarequest.getParameter()取得元数据。 |
httpMethod |
选择GET或者POST。 |
rpcType |
选择是使用xhr、iframe或者script-tag来实现远程调用。 |
timeout |
设定超时时长,单位是ms。 |
可以通过使用batch来批量执行远程调用。这样可以减少与服务器的交互次数、提高程序的响应速度。一个batch调用以dwr.engine.beginBatch()开始,并以dwr.engine.endBatch()结束。当调用endBatch()后,就结束了本次批量远程调用,这样DWR在与服务器的一次交互中执行它们。例如:
dwr.engine.beginBatch(); Remote.methodInBatch1(params, callback1); Remote.methodInBatch2(params, callback2); dwr.engine.endBatch({timeout: 1000});
可以通过调用dwr.engine.setTimeout()来设置单次调用和批量调用级别的元数据选项的超时值。如果设置值为0(默认)可以将超时关闭。它的单位是毫秒。如果调用超时发生,错误处理器就会被调用。例如:
Remote.method(params, { callback: function(data) { alert("进行远程调用"); }, errorHandler: function(msg) { alert("远程调用出错:" + msg); }, timeout: 2000 });
提示:如果把一些远程调用放在一起执行也会产生一些影响,例如不能在batch里执行同步调用。所有的元数据选项,例如hooks、timeout、errorHandler都是batch级别的,而不是单次调用级别上的,所以如果一个batch中有两个调用设置了不同的超时,除了最后一个起作用,其他的设置都被忽略。
在DWR中有一些选项用来控制远程调用的处理方式。
该选项指定XHR是否为异步调用,默认为true。如果使用的是IFrame或者ScriptTag,这一选项将被忽略。一般来说把它设置为false会使浏览器运行变慢。设置全局同步机制的方法为:
dwr.engine.setAsync(true);
设置成单次调用同步的方法为:
Remote.method(params, { callback: function(data) {/* code */}, async: true });
该选项用来设置新的方法。它不能保证使用选择的方法,它只是保证首先尝试使用那个方法。newmethod必须是dwr.engine.XMLHttpRequest、dwr.engine.IFrame或dwr.engine.ScriptTag。其中XMLHttpRequest是默认值。当ActiveX被禁时,可以使用IFrame,尽管DWR能自动检测出这种情况并切换到IFrame。当要突破跨域调用的限制时,就可以使用ScriptTag。例如,要设置全局的远程调用方法:
dwr.engine.setMethod(dwr.engine.IFrame);
设置成单次调用同步的方法为:
Remote.method(params, { callback: function(data) {/* code */}, method: dwr.engine.IFrame });
在batch里设置的方法为:
dwr.engine.beginBatch(); Remote.methodInBatch1(params, callback1); Remote.methodInBatch2(params, callback2); dwr.engine.endBatch({method: dwr.engine.IFrame});
该选项允许选择POST和GET方法,无论使用IFrame还是XMLHttpRequest方法,当一些浏览器不支持XHR-POST方法时,DWR就自动切换到GET,即使设置POST为verb,所以setVerb()应当被仅仅作为一个提示。如果使用ScriptTag来远程调用,没有verb的设置,例如,设置全局远程调用的verb方法为:
dwr.engine.setVerb("GET");
设置单次调用verb方法为:
Remote.method(params, { callback: function(data) {/* code */}, verb: "GET" });
在batch中调用verb的方法为:
dwr.engine.beginBatch(); Remote.methodInBatch1(params, callback1); Remote.methodInBatch2(params, callback2); dwr.engine.endBatch({verb: "GET"});
选项 | 说明 |
errorHandler | 当出现错误时的动作。服务器端的异常通过exceptionHandler来处理。 |
warningHandler | 由于浏览器的bug引起问题时的动作,默认值设置为null(关闭)。 |
textHtmlHandler | 当得到不正常的te
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|