|
在任何瀏覽器上方便地實現(xiàn)Ajax請求是每一個Ajax框架的初衷。Dojo在這方面無疑提供了非常豐富的支持。除了XMLHttpRequest之外,動態(tài)script、iframe、RPC也應(yīng)有盡有,并且接口統(tǒng)一,使用方便,大多數(shù)情況下都只需要一句話就能達(dá)到目的,從而免除重復(fù)造輪子的麻煩。而且,Dojo一貫追求的概念完整性也在這里有所體現(xiàn),換句話說,在使用Dojo的Ajax工具的過程中不會感到任何的不自然,相反更容易有觸類旁通的感覺,因為API的模式是統(tǒng)一的,而且這里涉及到的某些概念(如Deferred對象)也貫穿在整個Dojo之中。
Dojo的XHR函數(shù)
Dojo的XMLHttpRequest函數(shù)就叫dojo.xhr,除了把自己取名美元符號之外,這好像是最直接的辦法了。它定義在Dojo基本庫里,所以不需要額外的require就能使用。它可以實現(xiàn)任何同域內(nèi)的http請求。不過更常用的是dojo.xhrGet和dojo.xhrPost,它們只不過是對dojo.xhr函數(shù)的簡單封裝;當(dāng)然根據(jù)REST風(fēng)格,還有dojo.xhrPut和dojo.xhrDelete。
這些函數(shù)的參數(shù)都很統(tǒng)一。除了dojo.xhr的第一個參數(shù)是http方法名之外,所有的dojo.xhr*系列函數(shù)都接受同一種散列式的參數(shù),其中包含請求的細(xì)節(jié),例如url、是否同步、要傳給服務(wù)器的內(nèi)容(可以是普通對象、表單、或者純文本)、超時設(shè)定、返回結(jié)果的類型(非常豐富且可擴展)、以及請求成功和失敗時的回調(diào)。所有dojo.xhr*函數(shù)(實際上是所有IO函數(shù))返回值也都一樣,都是一個Deferred對象,顧名思義,它能讓一些事情延遲發(fā)生,從而讓API用起來更靈活。
下面的兩個例子可能會帶來一點直觀感受:
dojo.xhrGet({
url: "something.html",
load: function(response, ioArgs){
//用response干一些事
console.log("xhr get success:", response)
return response //必須返回response
},
error: function(response, ioArgs){
console.log("xhr get failed:", response)
return response //必須返回response
}
})
//Deferred對象允許用同步調(diào)用的寫法寫異步調(diào)用
var deferredResult = dojo.xhrPost({
url: "something.html",
form: formNode, //Dojo會自動將form轉(zhuǎn)成object
timeout: 3000, //Dojo會保證超時設(shè)定的有效性
handleAs: "json" //得到的response將被認(rèn)為是JSON,并自動轉(zhuǎn)為object
})
//當(dāng)響應(yīng)結(jié)果可用時再調(diào)用回調(diào)函數(shù)
deferredResult.then(function(response){
console.log("xhr get success:", response)
return response //必須返回response
})
NET技術(shù):用Dojo實現(xiàn)Ajax請求:XHR、跨域、及其他,轉(zhuǎn)載需保留來源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。