XMLHttP對(duì)象在嵌入式Web實(shí)時(shí)系統(tǒng)中的應(yīng)用
摘要:就Ajax技術(shù)中的XMLHttp對(duì)象在基于Web的嵌入式遠(yuǎn)程控制與實(shí)時(shí)監(jiān)測(cè)系統(tǒng)中的應(yīng)用開發(fā)進(jìn)行了研究,并基于Microchip TCP/IP協(xié)議棧給出了具體的實(shí)現(xiàn)方法,有效地解決了客戶端Web與嵌入式HTTP服務(wù)器的交互問(wèn)題。
關(guān)鍵詞:嵌入式系統(tǒng);TCP/IP;Web開發(fā);Ajax;XMLHttp;Javascript
引言
傳統(tǒng)的Web應(yīng)用在交互操作過(guò)程中頻繁出現(xiàn)全頁(yè)刷新的問(wèn)題無(wú)法避免,即使當(dāng)前頁(yè)面中僅有局部信息是需要?jiǎng)討B(tài)刷新顯示的。這不僅影響到界面效果,在實(shí)時(shí)監(jiān)測(cè)過(guò)程中還會(huì)明顯影響服務(wù)器的響應(yīng)速度。
Ajax技術(shù)的出現(xiàn)為解決客戶端Web與嵌入式HTTP服務(wù)器之間的交互問(wèn)題提供了重要途徑。Ajax是異步Javascript與XML的簡(jiǎn)稱,這一概念由Jesse James Garrett提出,它是一組與Web開發(fā)相關(guān)的技術(shù),包括基于HTML/XHTML與CSS標(biāo)準(zhǔn)的頁(yè)面表示、基于DOM的動(dòng)態(tài)顯示和交互,以及基于XMLHttpRequest與服務(wù)器之間的異步通信。所有上述技術(shù)通過(guò)Javascript綁定在一起。
嵌入式以太網(wǎng)實(shí)時(shí)系統(tǒng)開發(fā)者可以嘗試通過(guò)Ajax的核心對(duì)象XMLHttp在“后臺(tái)”與嵌入式HTTP服務(wù)器交瓦,對(duì)服務(wù)器發(fā)起遠(yuǎn)程控制,讀取服務(wù)器動(dòng)態(tài)返回的監(jiān)測(cè)信息并刷新顯示在客戶端Web界面中的特定位置,且所有操作均不會(huì)導(dǎo)致當(dāng)前Web界面被全頁(yè)刷新。
本文以Microchip公司的TCP/IP協(xié)議棧為基礎(chǔ),討論XMLHttp對(duì)象在嵌入式Web實(shí)時(shí)系統(tǒng)中的具體應(yīng)用方法。所選用的測(cè)試電路以PIC18F4 52單片機(jī)與以太網(wǎng)接口芯片RTL8019AS為核心,嵌入式HTTP服務(wù)器所有Web相關(guān)文件保存在系統(tǒng)外部EEPROM存儲(chǔ)器中。
1 XMLHttp在客戶端Web中的應(yīng)用
XMLHttp是Ajax技術(shù)的核心,由微軟公司在IE5.0瀏覽器中率先推出,后被命名為XMLHttpRequest。
1.1 客戶端Javascript函數(shù)
1.1.1 創(chuàng)建XMLHttp對(duì)象的通用函數(shù)
客戶端與嵌入式系統(tǒng)HTTP服務(wù)器的所有交互都將基于在客戶端所創(chuàng)建的XMLHttp對(duì)象。該函數(shù)在IE中創(chuàng)建XMLHttp對(duì)象的語(yǔ)句為:
創(chuàng)建XMLHttp對(duì)象后最重要的操作是設(shè)置onreaclystatechange屬性(非IE中為onload),為其綁定異步回調(diào)函數(shù)。當(dāng)XMLHttp對(duì)象狀態(tài)變化時(shí),所指定的回調(diào)函數(shù)將自動(dòng)處理服務(wù)器回應(yīng)數(shù)據(jù)。
1.1.2 客戶端發(fā)送控制命令的函數(shù)
(1)Send_Control_CMD(URL,Html_id)
該函數(shù)可由客戶端Web中的控制命令按鈕點(diǎn)擊事件onClick觸發(fā)調(diào)用,它調(diào)用CreateXMLHttpObj創(chuàng)建XMLHttp對(duì)象,設(shè)置回調(diào)函數(shù),然后以GET方法對(duì)HTTP服務(wù)器發(fā)起請(qǐng)求。函數(shù)的第一個(gè)參數(shù)URL可以是控制命令串,也可以是CGI、HTML及其他各種Web文件名。如果要求在客戶端Web中顯示HTTP服務(wù)器返回信息,則需要設(shè)置第二個(gè)參數(shù)Html_id。例如,在發(fā)送控制命令點(diǎn)亮系統(tǒng)中某個(gè)指示燈后,要求將服務(wù)器返回的該指示燈的當(dāng)前狀態(tài)顯示在客戶端。所設(shè)置的參數(shù)Html_id是客戶端Web頁(yè)中的某個(gè)容器的ID,返回信息將顯示到該容器中。如果不需要服務(wù)器回應(yīng)文本信息,或?qū)貞?yīng)信息不予處理,可將該參數(shù)設(shè)為空。函數(shù)具體實(shí)現(xiàn)如下:
Send_Control_CMD在每次被涮用時(shí)首先創(chuàng)建一個(gè)通用對(duì)象Obj,然后創(chuàng)建XMLHttp對(duì)象,并將其保存在自定義的Obj.xmlhttpobj屬性中,隨后調(diào)用XMLHttp對(duì)象的open方法與send方法,調(diào)用格式為:
oXMLHttpRequest.open(bstrMethod,bstrUrl,varAsync,
bstrUser,bstrPassword);
oXMLHttpRequest.send(varBody);
其中open方法的bstrMethod參數(shù)為HTTP請(qǐng)求的方法,例如所選擇的“GET”方法,bstrUrl參數(shù)為請(qǐng)求的URL地址,在本文討論的嵌入式Web實(shí)時(shí)系統(tǒng)中,它用來(lái)表示控制命令串,譬如用來(lái)啟動(dòng)外部直流電機(jī)的控制命令串“0?1=MOTOR”,varAsync參數(shù)用于指定當(dāng)前請(qǐng)求是否為異步方式,默認(rèn)為true,最后兩個(gè)參數(shù)提供帳號(hào)密碼,用于服務(wù)器驗(yàn)證。通過(guò)open方法初始化XMLHttp對(duì)象以后,要用send方法發(fā)送請(qǐng)求到HTTP服務(wù)器并等待回應(yīng)。由于XMLHttp對(duì)象被設(shè)為異步模式,send調(diào)用將不會(huì)被阻塞,XMLHttp對(duì)象的回調(diào)函數(shù)mReadyCallBack將在HTTP服務(wù)器回應(yīng)時(shí)異步執(zhí)行。
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論