眾所周知,異步交互、JavaScript腳本和XML封裝數據是AJAX的三大特征。其實(shí),在實(shí)際應用中,不需要牢牢套死這三條大律,在我看來(lái),AJAX - X,即去掉用XML封裝數據,也不失為一種好的設計思路,如果應用恰當,更顯輕盈步伐和巧妙思路。
一般讀取AJAX返回的XML結構的數據時(shí)使用XMLHttp的responseXML對象屬性,同時(shí),XMLHttp也提供了另外一個(gè)屬性,即ResponseText,通過(guò)這個(gè)屬性,XMLHttp可以接受來(lái)自服務(wù)器的文本結構的字符串信息。去掉XML的AJAX可以使用ResponseText這個(gè)對象屬性,很靈活的操控返回數據的格式,可以自定義格式,比如我通常喜歡用c語(yǔ)言的那種文件流方式定義返回的字符串結構,有文件頭和具體的文件信息實(shí)體,文件頭分為狀態(tài)信息以及文件字符長(cháng)度,我摒棄了文件字符長(cháng)度的定義,規定死接受的ResponseTex字符串中的第一位為狀態(tài)碼,比如設定常量值0表示一起正常,非0的數字表示不正常,甚至有錯誤等。如果有非0值,程序自動(dòng)取第二位起到257位(長(cháng)度為256)的字符串組成為狀態(tài)信息,從258位開(kāi)始到末尾的字符串就是服務(wù)器返回的正常結果信息。
substring(0,1)取狀態(tài)碼
substring(1,256)取服務(wù)器錯誤信息(錯誤信息不夠256位用空格補齊,取到數據后進(jìn)行Trim處理)
substring(256,末尾)取服務(wù)器返回的數據信息
三次substring即完成了一個(gè)簡(jiǎn)單但完整的交互工作。比起XML解析組件來(lái)說(shuō)要快的多。
用ResponseText比封裝為XML處理數據快和簡(jiǎn)單是一個(gè)原因,另一個(gè)原因是可操控性更大更靈活,打開(kāi)Google Suggest,在搜索框輸入字符可以給你給出拼寫(xiě)提示,Suggest就是應用了AJAX技術(shù),不過(guò)它在從服務(wù)器返回數據時(shí)并沒(méi)有使用XML封裝,也沒(méi)有自定義ResponseText格式,而是直接將返回代碼組織成js腳本,通過(guò)瀏覽器返回后直接執行,如eval(XMLHttp.ResponseText)這樣的方式進(jìn)行執行,http://www.google.com/complete/search?hl=en&js=true&qu=ajax 通過(guò)這個(gè)鏈接你可以看到Suggest利用AJAX得到的返回數據,此頁(yè)面是在Google Suggest的搜索框中輸入"AJAX"后得系統動(dòng)態(tài)返回的數據。
sendRPCDone(frameElement, "ajax", new Array("ajax", "ajax amsterdam", "ajax fc", "ajax ontario", "ajax grips", "ajax football club", "ajax public library", "ajax football", "ajax soccer", "ajax pickering transit"), new Array("3,840,000 results", "502,000 results", "710,000 results", "275,000 results", "8,860 results", "573,000 results", "40,500 results", "454,000 results", "437,000 results", "10,700 results"), new Array(""));瀏覽器段拿到這段代碼后直接eval就可以了,至于sendRPCDone這個(gè)函數,那當然得實(shí)現定義后并裝載到頁(yè)面中啦。XMLHttp這個(gè)名字以XML開(kāi)頭,讓很多人禁錮了思想和創(chuàng )意,完全拋棄X,你也可以做出純AJAX的實(shí)例來(lái)。
當然,對于大型系統來(lái)講,為了保持數據接口的一致和整齊,還是用XML來(lái)傳遞更嚴謹更統一點(diǎn),聽(tīng)說(shuō)微軟已經(jīng)發(fā)起了重寫(xiě)XML Parse組件的號召,估計下一個(gè)版本的XMLHttp還是DOMParser還是MSXML2.DOMDocument都會(huì )大大提高效率,減少資源占用的。
注:全文完

