Boaサーバー下のajaxとcgi通信

3734 ワード

最近では、組込み式のカリキュラムの設計をしていますが、cotax a 8ベースのオンライン実験箱を利用して、簡単な組込み式ウェブページのインタラクティブシステムを作って、授業設計として採点を受けます。自分が学の前端なので、Webページの部分は重点的ではありません。主にboaサーバとの通信です。カリキュラムの実験はprintfを使って印刷します。だから博主はajaxを採用してboaサーバー下の非同期通信を行います。
主に実現された穴は以下の通りです。
1.getまたはpost要求:どうやってW 3 School上のajax教程を参照してください。
一般の人は前端の基礎がない人を推薦してgetを使って要求します。要求したパラメータを一つの文字列でつづり合わせるだけで基本的なajax要求を完成できます。具体的な実現はこのウェブサイトを参照してください。

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を実現し、関数の2つのパラメータはそれぞれ要求されたurlと送信されるデータであり、post要求はstringタイプのデータしか送信できないことに注意する。他のタイプのデータを送るなら、jqueryパッケージのajax方法を採用することを提案します。ここでは、生のajax方法を採用してデータを送る理由は主に以下のいくつかあります。
•jqueryライブラリの体積が大きいので、mountが開発箱のlinuxシステムに入ると失敗する可能性があります。この場合はmount udi方式でmount udiを解決できます。コマンドは以下の通りです。mount-r/dev/web-rはmount進ファイルの読み書き権限です。具体的には検索を実行できます。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

"); 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要求は比較的簡単で、直接getensvを使用します。STRING")は、要求されたデータを取得することができ、post要求の処理は、要求内容の長さを先に取得し、長さに応じて等長の文字列空間を動的に割り当て、送信されたデータを文字列に転送し、自分のプロジェクトの必要に応じて処理すれば良い。
PS:http要求を送信する時に対応する成功プログラムprintfの後にhttp要求が受諾したもので、対応するxhrのレスポンスText属性値です。また、cファイルにはarn-linux-gcc-hello world.cgi名前を付けてクロスコンパイルして対応するcgiファイルが必要です。そしてブログ主は、setInterval関数を直接使用してサイクリック要求センサデータを行うと、プロセスとほぼ同じ遅延が発生し、直接ファイルによってセンサーデータを格納する方式では、set Interval関数を使用することができるので、各要求が成功した後に次の要求を送信する。
以上は小编で绍介したBoaサーバーのajaxとcgi通信のすべての叙述です。皆様のために役に立つことを望んでいます。