新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > XMLHttP對(duì)象在嵌入式Web實(shí)時(shí)系統(tǒng)中的應(yīng)用

XMLHttP對(duì)象在嵌入式Web實(shí)時(shí)系統(tǒng)中的應(yīng)用

作者: 時(shí)間:2011-11-15 來(lái)源:網(wǎng)絡(luò) 收藏

由于頁(yè)中可能有多個(gè)不同按鈕要發(fā)送不同的控制命令,為簡(jiǎn)化程序設(shè)計(jì)且便于管理,可將每一按鈕調(diào)用該函數(shù)創(chuàng)建的xMLHttp統(tǒng)一保存到全局數(shù)組ObjArray中。對(duì)象數(shù)組ObjArray由頁(yè)中的Javascript腳本定義,即:
script language=“Javascript”>
var ObjArray=new Array;……
(2)mReadyCallBack()
它是Send_Control_CMD函數(shù)所創(chuàng)建的保存于對(duì)象數(shù)組ObjArray中的每個(gè)XMLHttp對(duì)象的異步回調(diào)函數(shù),通過(guò)該函數(shù)可統(tǒng)一異步處理服務(wù)器回應(yīng)數(shù)據(jù)。函數(shù)具體實(shí)現(xiàn)如下:
c.jpg
當(dāng)ObjArray中的任意一個(gè)XMLHttp對(duì)象的就緒狀態(tài)變化時(shí),將觸發(fā)對(duì)mReadyCallBack函數(shù)的異步調(diào)用,該函數(shù)將通過(guò)for循環(huán)掃描對(duì)象數(shù)組ObjArray,對(duì)HTTP服務(wù)器當(dāng)前回應(yīng)的對(duì)象進(jìn)行處理。通過(guò)XMLHttp對(duì)象的responseText屬性可獲取服務(wù)器回應(yīng)信息,通過(guò)容器的inner HTML屬性可將回應(yīng)信息顯示到Web頁(yè)中。在處理完當(dāng)前XMLHttp對(duì)象以后,mReadyCallBack最終將用delete釋放該對(duì)象所占用的資源。如果調(diào)用Send_control_CMD函數(shù)時(shí)第2個(gè)參數(shù)為空,則表示發(fā)出控制命令后不需要處理服務(wù)器回應(yīng)文本信息,回調(diào)函數(shù)僅僅需要釋放該對(duì)象所占用的資源。
1.1.3 實(shí)現(xiàn)客戶端監(jiān)測(cè)功能的函數(shù)
(1)RealTime_Monitoring()
該函數(shù)專(zhuān)門(mén)用于監(jiān)測(cè)動(dòng)態(tài)數(shù)據(jù),它由Web頁(yè)面加載事件onLoad觸發(fā)調(diào)用,通過(guò)所創(chuàng)建的xMLHttp對(duì)象向服務(wù)器請(qǐng)求動(dòng)態(tài)文件Status.cgi,以獲取監(jiān)測(cè)數(shù)據(jù)。
d.jpg
其中xmlhttp定義為全局變量。
(2)aReadyCallBack()
該函數(shù)是監(jiān)測(cè)外設(shè)數(shù)據(jù)函數(shù)RealTime_Monitoring所創(chuàng)建的XMLHttp對(duì)象的專(zhuān)用回調(diào)函數(shù),它在處理HTTP服務(wù)器回應(yīng)時(shí)將返回的動(dòng)態(tài)監(jiān)測(cè)數(shù)據(jù)顯示在ID為“txtStatus”的Web容器中,譬如span id=“txtStatus”>…/span>,所返回的內(nèi)容將替換其中的“…”。函數(shù)具體實(shí)現(xiàn)如下:
e.jpg
f.jpg
回調(diào)函數(shù)aReadyCallBack與回調(diào)函數(shù)mReadyCallBack的差別在于:它釋放已經(jīng)處理回應(yīng)的XMLHttp對(duì)象(置為null)以后,接著執(zhí)行了一項(xiàng)重要工作,即調(diào)用實(shí)時(shí)監(jiān)測(cè)函數(shù)RealTime_Monitoring()。通過(guò)創(chuàng)建新的XMLhttp對(duì)象,將動(dòng)態(tài)請(qǐng)求與顯示刷新“接力”進(jìn)行下去,從而使實(shí)時(shí)監(jiān)測(cè)無(wú)限延續(xù)。
顯然,通過(guò)XMLHttp對(duì)象所實(shí)現(xiàn)的實(shí)時(shí)監(jiān)測(cè),其效果遠(yuǎn)遠(yuǎn)優(yōu)于傳統(tǒng)的Web請(qǐng)求與響應(yīng)操作模式下所使用的通過(guò)在網(wǎng)頁(yè)頭部加入meta http-equiv=“refresh”content=“定時(shí)長(zhǎng)度”>,或者使用Javascript的setTimeout函數(shù)設(shè)置超時(shí)值,使客戶端自動(dòng)按固定時(shí)間間隔請(qǐng)求服務(wù)器刷新顯示動(dòng)態(tài)信息的方法。
1.2 客戶端Web與HTTP服務(wù)器的交互操作
有了上述以XMLHttp對(duì)象為中心的函數(shù)定義,完成客戶端Web與HTTP服務(wù)器之間的交互操作就很容易了,例如:
①通過(guò)Web頁(yè)按鈕啟動(dòng)電機(jī).可有input type=“button”onClick=“Send_Ctrl_CMD(’0?1=MOTOR’,’)”value=“運(yùn)行”>。按鈕事件觸發(fā)對(duì)Send_Control_CMD的調(diào)用,它通過(guò)XMLHttp對(duì)象在“后臺(tái)”發(fā)送命令串“O?1=MOTOR”,提交給HTTP服務(wù)器處理,控制電機(jī)啟動(dòng),實(shí)現(xiàn)遠(yuǎn)程控制功能。
②實(shí)時(shí)監(jiān)測(cè)嵌入式外設(shè)狀態(tài),可有body onLoad=“ReaITime Monitoring();”>。Web頁(yè)面加載事件onLoad觸發(fā)對(duì)RealTime_Monit oring的函數(shù)調(diào)用,它同樣也通過(guò)XMLHttp對(duì)象訪問(wèn)嵌入式系統(tǒng)HTTP服務(wù)器,不同的是它所請(qǐng)求的是動(dòng)態(tài)文件status.cgi。現(xiàn)假設(shè)所訪問(wèn)的動(dòng)態(tài)文件主要內(nèi)容如下:
td width=“150”>%02/td>
td width=“200”>LED1:%00 LED2:%01/td>
td width=“168”>%10/td>
嵌入式系統(tǒng)HTTP服務(wù)器程序?qū)腗PFS文件系統(tǒng)讀取該動(dòng)態(tài)文件并將其發(fā)往客戶端。在發(fā)送過(guò)程中,HTTP服務(wù)器將對(duì)所遇到的形如“%xx”的變量碼進(jìn)行解析處理。例如“%02”被定義為測(cè)試電路中AN0通道的A/D值,“%00”“%01”被定義為兩個(gè)外接LED的開(kāi)關(guān)狀態(tài),“%10”被定義為所控制的直流電機(jī)的啟/停狀態(tài)。經(jīng)過(guò)HTTP服務(wù)器處理后的變量值將被系統(tǒng)當(dāng)前實(shí)際的外設(shè)狀態(tài)值所替換并返回到客戶端。
由于RealTime_Monitoring函數(shù)與aReadyCallBack函數(shù)配合實(shí)現(xiàn)了XMLHttp對(duì)象的創(chuàng)建、請(qǐng)求、異步響應(yīng)、釋放,再創(chuàng)建、再請(qǐng)求、再異步響應(yīng)、再釋放等,從而借助XMLHttp對(duì)象在“后臺(tái)”實(shí)現(xiàn)了理想的實(shí)時(shí)監(jiān)測(cè)功能。由于監(jiān)測(cè)結(jié)果實(shí)時(shí)刷新顯示在Web中的特定容器位置,不會(huì)導(dǎo)致全頁(yè)刷新問(wèn)題,這也為用戶操作帶來(lái)了良好體驗(yàn)。
解決了客戶端通過(guò)XMLHttp塒象在“后臺(tái)”與HTTP服務(wù)器進(jìn)行交互、發(fā)送控制命令及異步處理回應(yīng)、實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)功能的問(wèn)題以后,接著要解決的是HTTP服務(wù)器端如何處理客戶端XMLHttp對(duì)象所發(fā)送的控制命令,以及如何處理并返回客戶端XMLHttp對(duì)象所請(qǐng)求的動(dòng)態(tài)文件。
linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

tcp/ip相關(guān)文章:tcp/ip是什么




評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉