溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何采用ajax來進(jìn)行boa服務(wù)器下的異步通信

發(fā)布時(shí)間:2021-09-14 11:04:17 來源:億速云 閱讀:141 作者:小新 欄目:web開發(fā)

這篇文章給大家分享的是有關(guān)如何采用ajax來進(jìn)行boa服務(wù)器下的異步通信的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

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

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

推薦一般人沒有前端基礎(chǔ)的人使用get請(qǐng)求,因?yàn)橹恍枰谡?qǐng)求的參數(shù)做一個(gè)字符串拼接就可以完成基本的ajax請(qǐng)求,具體實(shí)現(xiàn)可以參照一下這個(gè)網(wǎng)址(http://blog.csdn.net/huguohu2006/article/details/7755107),接下來重點(diǎn)講一下post請(qǐng)求,優(yōu)勢(shì)這里我就不多講了,前面的教程里面都有,主要講一下實(shí)現(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í)處理一個(gè)函數(shù)
// 這個(gè)函數(shù)應(yīng)當(dāng)作為一個(gè)參數(shù)傳遞入函數(shù)。有個(gè)奇怪現(xiàn)象你如果去除紅線部分的注釋,firefox又可以取到值。
// 估計(jì)是firefox使用ajax取值有個(gè)延時(shí)造成。
//return xhr.responseText.toString();
}
};
xhr.open("post", url, true);
// send(string) 僅適用于post請(qǐng)求
xhr.send(data);
} else {
//XMLHttpRequest對(duì)象創(chuàng)建失敗
alert("瀏覽器不支持,請(qǐng)更換瀏覽器!");
}
}

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

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

?發(fā)送的數(shù)據(jù)不很多,也沒有其他的類型要求,使用string類型完全可以滿足開發(fā)需求,沒必要引入jquery庫(kù)增加項(xiàng)目空間

?原生的ajax可以更好地解釋http請(qǐng)求的原理

下面再介紹一下cgi文件對(duì)http請(qǐng)求的處理,示例函如下:

#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語(yǔ)言處理兩種請(qǐng)求的方法,get請(qǐng)求比較簡(jiǎn)單,直接使用getenv("QUERY_STRING")就可以獲取到請(qǐng)求發(fā)送的數(shù)據(jù),post請(qǐng)求的處理則比較負(fù)責(zé),先獲取請(qǐng)求內(nèi)容長(zhǎng)度,然后根據(jù)長(zhǎng)度來動(dòng)態(tài)分配一個(gè)等長(zhǎng)的字符串空間,將發(fā)送的數(shù)據(jù)傳給字符串,然后再根據(jù)自己項(xiàng)目的需要進(jìn)行相應(yīng)的處理即可。

感謝各位的閱讀!關(guān)于“如何采用ajax來進(jìn)行boa服務(wù)器下的異步通信”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI