最近在最有做一個嵌入式課程設計,要求是利用基于cortax a8的物聯網實驗箱做一個簡單的嵌入式網頁交互系統作為課程設計來驗收評分。因為本身自己是學前端的,所以網頁部分并不是重點,主要是和boa服務器之間的通信,課程實驗給的例子是直接使用printf來打印html標簽形成新的頁面,有過前端開發經驗的人都知道這種做法效率低下而且沒有辦法實現異步刷新,所以博主采用ajax來進行boa服務器下的異步通信。
主要實現及踩過的坑如下:
1. get 還是 post請求:怎么發請求參見W3School上的ajax教程
推薦一般人沒有前端基礎的人使用get請求,因為只需要在請求的參數做一個字符串拼接就可以完成基本的ajax請求,具體實現可以參照一下這個網址(http://blog.csdn.net/huguohu2006/article/details/7755107),接下來重點講一下post請求,優勢這里我就不多講了,前面的教程里面都有,主要講一下實現方式:
利用調用sender函數來實現ajax,函數的兩個參數分別是請求的url和要發送的數據,注意post請求只能發送string類型的數據。如果要發送其他類型的數據建議采用jquery封裝的ajax方法,這里之所以采用原生的ajax方法來發送數據主要有以下幾個原因:
?jquery庫的體積比較大,有可能mount進開發箱上的linux系統時出現失敗的情況,這種情況可以通過mount u盤的方式解決 mount u盤的命令如下: mount -r /dev/uba4 /web -r為mount進文件的讀寫權限,具體可執行搜索查詢,uba4為U盤在linux系統上顯示的名字,web為目標文件夾,使用U盤掛載的缺點在于整個U盤的文件會全部被復制到目標文件夾中,有點綴余
?發送的數據不很多,也沒有其他的類型要求,使用string類型完全可以滿足開發需求,沒必要引入jquery庫增加項目空間
?原生的ajax可以更好地解釋http請求的原理
下面再介紹一下cgi文件對http請求的處理,示例函如下:
上面包含了c語言處理兩種請求的方法,get請求比較簡單,直接使用getenv("QUERY_STRING")就可以獲取到請求發送的數據,post請求的處理則比較負責,先獲取請求內容長度,然后根據長度來動態分配一個等長的字符串空間,將發送的數據傳給字符串,然后再根據自己項目的需要進行相應的處理即可。
PS:發送http請求時對應的成功程序printf之后就是http請求接受到的相應,也就是對應的xhr的responseText屬性值,另外.c文件需要理由arn-linux-gcc -o helloworld.cgi helloworld.c命名交叉編譯得到對應的.cgi文件。然后博主用的是在每一次請求成功之后繼續發送下一次請求,因為如果直接使用setInterval函數進行循環請求傳感器數據的話會產生比較大的延時,基本等同于進程,如果直接通過文件存儲傳感器數據的方式則可以使用setInterval函數。
上面是我整理給大家的,希望今后會對大家有幫助。
相關文章:
Ajax+Struts2實現驗證碼驗證功能(圖文教程)
非常實用的ajax用戶注冊模塊
Ajax點擊不斷加載數據列表(圖文教程)
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com