dwr engine.js属性的调用

7.12.1 批量调用
可以通过使用batch来批量执行远程调用。这样可以减少与服务器的交互次数,可以提高程序的响应速度。一个batch调用以dwr.engine.beginBatch()开始,并以 dwr.engine.endBatch()结束。当调用dwr.engine.endBatch()后,就结束了本次批量远程调用,这样DWR与服务器的一次交互中执行它们。
作者提示:如果把一些远程调用放在一起执行也会产生一些影响。例如不能在batch里面执行同步调用。 所有的元数据选项,例如hooks、 timeouts和errorHandlers都是batch级别的,而不是单次调用级别上的。所以如果一个batch中有两个调用设置了不同的超时,除了最后一个起作用,其他的设置都被忽略。
7.12.2 顺序调用
因为Ajax一般是异步调用,所以远程调用不会按照调用时发送的顺序返回。可用通过用dwr.engine.setOrdered(boolean) 来设置返回的结果严格按照发送时的顺序返回。DWR在上一个请求安全返回以后才去发送下一个请求。DWR默认值为false,表示不能保证远程调用不会按照调用时发送的顺序返回。
作者提示:把这个属性的值设置为true,会减慢应用程序的运行,如果一个消息丢失,浏览器就不会在响应,所以在使用这一功能之前需要综合考虑。
7.12.3 错误警告和超时
如果DWR远程调用失败,就会调用错误和警告handler并传递错误消息。 可以用在alert窗口或状态栏中来显示错误信息。 也可以使用dwr.engine.setErrorHandler(function)来改变错误处理方式,同样通过dwr.engine.setWarningHandler(function)来改变警告处理方式。
 设置超时
可以通过调用dwr.engine.setTimeout()来设置单次调用和批量调用级别的元数据选项的超时值。如果设置值为0(默认)可以将超时关掉。 setTimeout()的单位是毫秒。如果调用超时发生,错误处理器就会被调用。下面就是一个错误警告和超时的例子,实现代码如下:
Remote.method(params,{callback:function(data) { alert("进行远程调用"); },
errorHandler:function(message) { alert("远程调用出错"+ message); },
timeout:2000
});
在上面程序中,如果Remote.method()调用超过了2分钟还没有返回,就会显示“远程调用出错”的消息提示。
7.12.4 远程调 Hooks
可以通过调用dwr.engine.setPreHook(function) 和 dwr.engine.setPostHook(function) 来设置远程调 Hooks, 如果想在DWR调用之前显示一个提示,可以设置pre-hook函数。它将会被调用,但是没有参数传递到这个函数。为防止一些按钮在调用期间被多次单击,可以使一些按钮在调用期间不可用以,可以应用pre-hook这一功能。 post-hook用来和pre-hook一起使用来逆转pre-hook产生的做的一些改变。
7.12.5 远程调用选项
在DWR中有一些选项用来控制远程调用的处理方式。下面是常用的远程调用选项。
 dwr.engine.setAsync(flag)
该选项指定让XHR是否为异步调用, 默认为true。如果使用的是IFrame或者ScriptTag,这一选项将被忽略。一般来说把它设置为false会使浏览器运行变慢。 设置全局同步机制的方法为:
dwr.engine.setAsync(true);
设置成单次调用同步的方法为:
Remote.method(params, {
callback:function(data) { ... },
async:true
});
 dwr.engine.setMethod(newmethod)
该选项用来设置新的方法。setMethod()不能保证使用你选择的方法,它只是保证首先尝试使用那个方法。newmethod必须是dwr.engine.XMLHttpRequest或dwr.engine.IFrame,或dwr.engine.ScriptTag。其中XMLHttpRequest是默认值。当ActiveX被禁时,用可以使用用IFrame,尽管DWR能自动检测出这种情况并切换到IFrame。当要突破跨域调用的限制,就可以使用ScriptTa。 例如,要设置全局的远程调用方法:
dwr.engine.setMethod(dwr.engine.IFrame);
设置成单次调用同步的方法为:
Remote.method(params, {
callback:function(data) { ... },
method: dwr.engine.IFrame
});
在batch里设置的方法为:
dwr.engine.beginBatch();
Remote.method1(params, callback1);
Remote.method2(params, callback2);
dwr.engine.endBatch({
method: dwr.engine.IFrame
});
 dwr.engine.setVerb(verb)
这个选项允许选择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) { ... }, verb:"GET"
});
在batch中调用verb方法为:
dwr.engine.beginBatch();
Remote.method1(params, callback1);
Remote.method2(params, callback2);
dwr.engine.endBatch({ verb:"GET"
});

你可能感兴趣的:(应用服务器,Ajax,浏览器,DWR)