engine.js Functions
engine.js對DWR非常重要,因爲它是用來轉換來至動態生成的接口的javascript函數調用的,所以只要用到DWR的地方就需要它。
The engine.js file
每一個頁面都需要下面這些語句來引入主DWR引擎。
<script type"text/javascript"
src="/[YOUR-WEB-APP]/dwr/engine.js">
</script>
使用選項
下面這些選項可以通過 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就應該 總是 爲每一個請求提供響應。