<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        Boa服務器下的ajax與cgi通信

        來源:懂視網 責編:小采 時間:2020-11-27 22:51:52
        文檔

        Boa服務器下的ajax與cgi通信

        Boa服務器下的ajax與cgi通信:最近在最有做一個嵌入式課程設計,要求是利用基于cortax a8的物聯網實驗箱做一個簡單的嵌入式網頁交互系統作為課程設計來驗收評分。因為本身自己是學前端的,所以網頁部分并不是重點,主要是和boa服務器之間的通信,課程實驗給的例子是直接使用printf來
        推薦度:
        導讀Boa服務器下的ajax與cgi通信:最近在最有做一個嵌入式課程設計,要求是利用基于cortax a8的物聯網實驗箱做一個簡單的嵌入式網頁交互系統作為課程設計來驗收評分。因為本身自己是學前端的,所以網頁部分并不是重點,主要是和boa服務器之間的通信,課程實驗給的例子是直接使用printf來

        最近在最有做一個嵌入式課程設計,要求是利用基于cortax a8的物聯網實驗箱做一個簡單的嵌入式網頁交互系統作為課程設計來驗收評分。因為本身自己是學前端的,所以網頁部分并不是重點,主要是和boa服務器之間的通信,課程實驗給的例子是直接使用printf來打印html標簽形成新的頁面,有過前端開發經驗的人都知道這種做法效率低下而且沒有辦法實現異步刷新,所以博主采用ajax來進行boa服務器下的異步通信。

        主要實現及踩過的坑如下:

        1. get 還是 post請求:怎么發請求參見W3School上的ajax教程

        推薦一般人沒有前端基礎的人使用get請求,因為只需要在請求的參數做一個字符串拼接就可以完成基本的ajax請求,具體實現可以參照一下這個網址(http://blog.csdn.net/huguohu2006/article/details/7755107),接下來重點講一下post請求,優勢這里我就不多講了,前面的教程里面都有,主要講一下實現方式:

        function sender(url, data) {
        var xhr = createXHR();
        if (xhr) {
        xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
        console.log(xhr.responseText);
        console.log(xhr.responseText.toString());
        var returnValue = xhr.responseText.toString();
        console.log(returnValue);
        return returnValue;
        // firefox下xhr.responseText作為返回值失效的問題
        // ie可以利用return來得到值。但firefox則不能,只能在readyState == 4 && status == 200時處理一個函數
        // 這個函數應當作為一個參數傳遞入函數。有個奇怪現象你如果去除紅線部分的注釋,firefox又可以取到值。
        // 估計是firefox使用ajax取值有個延時造成。
        //return xhr.responseText.toString();
        }
        };
        xhr.open("post", url, true);
        // send(string) 僅適用于post請求
        xhr.send(data);
        } else {
        //XMLHttpRequest對象創建失敗
        alert("瀏覽器不支持,請更換瀏覽器!");
        }
        }

        利用調用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請求的處理,示例函如下:

        #include <stdlib.h>
        #include <stdio.h>
        #include <string.h>
        char* get_cgi_data(FILE* fp, char* method)
        {
        char* input;
        int len;
        int size=1024;
        int i=0;
        if (strcmp(method, "GET") == 0) /**< GET method */
        {
        input = getenv("QUERY_STRING");
        return input;
        }
        else if (strcmp(method, "POST") == 0) /**< POST method */
        {
        len = atoi(getenv("CONTENT_LENGTH"));
        input = (char*)malloc(sizeof(char) * (size+1));
        if (len == 0)
        {
        input[0] = '\0';
        return input;
        }
        while (1)
        {
        input[i] = (char)fgetc(fp);
        if (i == size)
        {
        input[i+1] = '\0';
        return input;
        }
        --len;
        if (feof(fp) || (!(len)))
        {
        i++;
        input[i] = '\0';
        return input;
        }
        i++;
        }
        }
        return NULL;
        }
        int main(void)
        {
        char* input;
        char* method;
        char name[64];
        char passwd[64];
        int i=0;
        int j=0;
        printf("Content-type:text/html\n\n");
        printf("The following is query result:");
        method = getenv("REQUEST_METHOD");
        input = get_cgi_data(stdin, method);
        printf("string is: %s", input);
        return 0;
        }

        上面包含了c語言處理兩種請求的方法,get請求比較簡單,直接使用getenv("QUERY_STRING")就可以獲取到請求發送的數據,post請求的處理則比較負責,先獲取請求內容長度,然后根據長度來動態分配一個等長的字符串空間,將發送的數據傳給字符串,然后再根據自己項目的需要進行相應的處理即可。

        PS:發送http請求時對應的成功程序printf之后就是http請求接受到的相應,也就是對應的xhr的responseText屬性值,另外.c文件需要理由arn-linux-gcc -o helloworld.cgi helloworld.c命名交叉編譯得到對應的.cgi文件。然后博主用的是在每一次請求成功之后繼續發送下一次請求,因為如果直接使用setInterval函數進行循環請求傳感器數據的話會產生比較大的延時,基本等同于進程,如果直接通過文件存儲傳感器數據的方式則可以使用setInterval函數。

        以上所述是小編給大家介紹的Boa服務器下的ajax與cgi通信的全部敘述,希望對大家有所幫助,如果大家想了解更多內容敬請關注腳本之家!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Boa服務器下的ajax與cgi通信

        Boa服務器下的ajax與cgi通信:最近在最有做一個嵌入式課程設計,要求是利用基于cortax a8的物聯網實驗箱做一個簡單的嵌入式網頁交互系統作為課程設計來驗收評分。因為本身自己是學前端的,所以網頁部分并不是重點,主要是和boa服務器之間的通信,課程實驗給的例子是直接使用printf來
        推薦度:
        標簽: 通信 ajax cgi
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲高清有码中文字| 亚洲精品中文字幕无乱码| 精品无码专区亚洲| 毛片网站免费在线观看| 亚洲人成在线播放| 最近高清国语中文在线观看免费| 亚洲另类春色国产精品| 国产1024精品视频专区免费| 亚洲不卡在线观看| 成人毛片18岁女人毛片免费看| 亚洲卡一卡二卡乱码新区| 午夜免费不卡毛片完整版| 在线观看亚洲电影| 亚洲综合无码AV一区二区| 国产成人久久AV免费| 亚洲天堂福利视频| 日韩中文字幕在线免费观看| 美女视频黄a视频全免费网站色| 亚洲乱码日产精品a级毛片久久| 人人公开免费超级碰碰碰视频| 亚洲性猛交XXXX| 日韩免费无码一区二区三区 | 免费jjzz在线播放国产| 一个人看的www免费高清| 亚洲人成无码网站| 和日本免费不卡在线v| 猫咪www免费人成网站| 久久精品7亚洲午夜a| 成人免费福利视频| 亚洲风情亚Aⅴ在线发布| 久久久久亚洲精品男人的天堂| 最近中文字幕mv免费高清视频8| 亚洲一区二区三区久久久久| 亚洲国产aⅴ综合网| 91av视频免费在线观看| 亚洲精品宾馆在线精品酒店| 中国亚洲女人69内射少妇| 国产免费AV片在线播放唯爱网| 阿v视频免费在线观看| 亚洲精品美女在线观看播放| 四虎影视免费永久在线观看|