欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Boa服務(wù)器下的ajax與cgi通信

 更新時間:2016年07月11日 09:28:46   作者:小kk06  
最近小編在研究嵌入式開發(fā)的課程設(shè)計,接下來通過本篇文章給介紹了Boa服務(wù)器下的ajax與cgi通信的相關(guān)資料,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧

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

主要實現(xiàn)及踩過的坑如下:

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

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

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時處理一個函數(shù)
// 這個函數(shù)應(yīng)當(dāng)作為一個參數(shù)傳遞入函數(shù)。有個奇怪現(xiàn)象你如果去除紅線部分的注釋,firefox又可以取到值。
// 估計是firefox使用ajax取值有個延時造成。
//return xhr.responseText.toString();
}
};
xhr.open("post", url, true);
// send(string) 僅適用于post請求
xhr.send(data);
} else {
//XMLHttpRequest對象創(chuàng)建失敗
alert("瀏覽器不支持,請更換瀏覽器!");
}
}

利用調(diào)用sender函數(shù)來實現(xiàn)ajax,函數(shù)的兩個參數(shù)分別是請求的url和要發(fā)送的數(shù)據(jù),注意post請求只能發(fā)送string類型的數(shù)據(jù)。如果要發(fā)送其他類型的數(shù)據(jù)建議采用jquery封裝的ajax方法,這里之所以采用原生的ajax方法來發(fā)送數(shù)據(jù)主要有以下幾個原因:

•jquery庫的體積比較大,有可能mount進開發(fā)箱上的linux系統(tǒng)時出現(xiàn)失敗的情況,這種情況可以通過mount u盤的方式解決 mount u盤的命令如下: mount -r /dev/uba4 /web -r為mount進文件的讀寫權(quán)限,具體可執(zhí)行搜索查詢,uba4為U盤在linux系統(tǒng)上顯示的名字,web為目標(biāo)文件夾,使用U盤掛載的缺點在于整個U盤的文件會全部被復(fù)制到目標(biāo)文件夾中,有點綴余

•發(fā)送的數(shù)據(jù)不很多,也沒有其他的類型要求,使用string類型完全可以滿足開發(fā)需求,沒必要引入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")就可以獲取到請求發(fā)送的數(shù)據(jù),post請求的處理則比較負責(zé),先獲取請求內(nèi)容長度,然后根據(jù)長度來動態(tài)分配一個等長的字符串空間,將發(fā)送的數(shù)據(jù)傳給字符串,然后再根據(jù)自己項目的需要進行相應(yīng)的處理即可。

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

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

相關(guān)文章

  • SpringMVC環(huán)境下實現(xiàn)的Ajax異步請求JSON格式數(shù)據(jù)

    SpringMVC環(huán)境下實現(xiàn)的Ajax異步請求JSON格式數(shù)據(jù)

    這篇文章主要介紹了SpringMVC環(huán)境下實現(xiàn)的Ajax異步請求JSON格式數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • javascript 拖動_cookie_ajax等

    javascript 拖動_cookie_ajax等

    比較實用的js拖動效果代碼。類的寫法不錯,是個不錯的應(yīng)用
    2008-06-06
  • 使用AJAX(包含正則表達式)驗證用戶登錄的步驟

    使用AJAX(包含正則表達式)驗證用戶登錄的步驟

    這篇文章主要介紹了使用AJAX(包含正則表達式)驗證用戶登錄的步驟,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • Ajax跨域問題的解決辦法匯總(推薦)

    Ajax跨域問題的解決辦法匯總(推薦)

    本文給大家分享多種方法解決Ajax跨域問題,非常不錯具有參考借鑒價值,感興趣的朋友一起學(xué)習(xí)吧
    2016-05-05
  • Ajax異步提交數(shù)據(jù)返回值的換行問題實例分析

    Ajax異步提交數(shù)據(jù)返回值的換行問題實例分析

    這篇文章主要介紹了Ajax異步提交數(shù)據(jù)返回值的換行問題,結(jié)合實例形式較為詳細的分析了ajax異步提交過程中返回值帶有換行的處理技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • Ajax異步請求的五個步驟及實戰(zhàn)案例

    Ajax異步請求的五個步驟及實戰(zhàn)案例

    通過在后臺與服務(wù)器進行少量數(shù)據(jù)交換,Ajax可以使網(wǎng)頁實現(xiàn)異步更新,下面這篇文章主要給大家介紹了關(guān)于Ajax異步請求的五個步驟及實戰(zhàn)案例的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 強烈推薦 - Ajax 技術(shù)資源中心

    強烈推薦 - Ajax 技術(shù)資源中心

    強烈推薦 - Ajax 技術(shù)資源中心...
    2007-05-05
  • ASP.NET與Ajax的實現(xiàn)方式小總結(jié)

    ASP.NET與Ajax的實現(xiàn)方式小總結(jié)

    Ajax 應(yīng)該不是一項技術(shù),是一種思想而已,跟 ASP.NET 以及其它 Web 開發(fā)語言沒有什么太大關(guān)系,這里只是談?wù)?ASP.NET 中目前使用的 Ajax 技術(shù)以及其它一些實現(xiàn) Ajax 的優(yōu)秀框架。感興趣的朋友跟著小編一起學(xué)習(xí)asp.net與ajax的實現(xiàn)方式
    2015-09-09
  • ajax實現(xiàn)城市三級聯(lián)動

    ajax實現(xiàn)城市三級聯(lián)動

    這篇文章主要為大家詳細介紹了ajax實現(xiàn)城市三級聯(lián)動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 原生AJAX寫法實例分析

    原生AJAX寫法實例分析

    這篇文章主要介紹了原生AJAX寫法實例分析,以一個完整的原生Ajax實例分析了Ajax的實現(xiàn)技巧,有助于加深對Ajax的理解,需要的朋友可以參考下
    2015-02-02

最新評論