相關說明
操作系統:CentOS7
Web服務器:BOA
語言:HTML+JS+C
演示了網頁如何把數據通過AJAX發給後臺CGI和後臺CGI如何把數據返回到網頁的指定控件顯示
源碼參考:AJAX_CGI
BOA的搭建參考:Linux下嵌入式Web服務器BOA和CGI編程開發
小案例實戰參考:嵌入式web服務器BOA+CGI+HTML+MySQL項目實戰——Linux
源碼下載:GitHub,碼雲
效果展示
ajaxtest1.html
實現效果:在對應輸入框內輸入內容調用對應函數,非空,就顯示cgi程序返回的內容
if(strstr(lenstr,"txtIDA")!=NULL)
{
printf("[email protected]\n\n");
}
if(strstr(lenstr,"txtIDB")!=NULL)
{
printf("Liuyixu\n\n");
}
然後給對應控件進行賦值
document.getElementById("txtIDB").innerHTML=xmlhttp.responseText;
ajaxtest3.html
點擊按鈕
<input type="submit" value="get_info" onclick="get_info()" />
實現獲取cgi發送回來的json字符串
if(strstr(lenstr,"get_info") != NULL)
{
printf("{\"A\":\"%s\",\"B\":\"%s\"}",ip,prot);
}
轉json對象,給對應控件賦值的效果
//將接收到的字符串存入jsonstr
var jsonstr = xmlhttp.responseText;
alert("json:"+jsonstr);
// 將jsonstr轉換爲json對象 json
var json = JSON.parse(jsonstr);
if(json[name1]){
var value = json[name1];
// 直接給id爲name1的控件賦值
document.getElementById(name1).innerHTML = value;
}
if(json[name2]){
var value = json[name2];
document.getElementById(name2).innerHTML = value;
}
部分源碼
cgi_main.h裏面是空的
ajaxtest1.html
<html>
<head>
<script type="text/javascript">
function FuncA(str)
{
var xmlhttp;
if(str.length==0)
{
document.getElementById("txtIDA").innerHTML="";
return;
}
if(window.XMLHttpRequest)
{
//code for IE7+,Firefox,Chrome,Opera,Safari
xmlhttp=new XMLHttpRequest();
}
else
{
//code for IE6,IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtIDA").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","cgi-bin/ajax1.cgi?txtIDA="+str,true);
xmlhttp.send();
}
function FuncB(str)
{
var xmlhttp;
if(str.length==0)
{
document.getElementById("txtIDB").innerHTML="";
return;
}
if(window.XMLHttpRequest)
{
//code for IE7+,Firefox,Chrome,Opera,Safari
xmlhttp=new XMLHttpRequest();
}
else
{
//code for IE6,IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtIDB").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","cgi-bin/ajax1.cgi?txtIDB="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<h3>演示了網頁如何把數據通過AJAX發給後臺CGI:</h3>
<h3>和後臺CGI如何把數據返回到網頁的指定控件顯示:</h3>
<form action="">
姓氏:<input type="text" id="txt1" onkeyup="FuncA(this.value)" />
年齡:<input type="text" id="txt2" onkeyup="FuncB(this.value)" />
</form>
<p>建議:<span id="txtIDA"></span></p>
<p>說明:<span id="txtIDB"></span></p>
</body>
</html>
ajax1.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "cgi_main.h"
int main(void)
{
char *lenstr;
int fd_webdata=-1;
if(lenstr=getenv("QUERY_STRING"))
{
}
else
{
}
printf("Content type: text/html\n\n");
if(strstr(lenstr,"txtIDA")!=NULL)
{
printf("[email protected]\n\n");
}
if(strstr(lenstr,"txtIDB")!=NULL)
{
printf("Liuyixu\n\n");
}
//最後記得關閉文件
close(fd_webdata);
return 0;
}
ajaxtest3.html
<html>
<head>
<script type="text/javascript">
function get_json(json,formId) {
alert("進入get_json函數");
var name1 = "A";
var name2 = "B";
if(json[name1]){
var value = json[name1];
// 直接給id爲name1的控件賦值
document.getElementById(name1).innerHTML = value;
}
if(json[name2]){
var value = json[name2];
document.getElementById(name2).innerHTML = value;
}
alert("get_json運行完畢");
};
function get_info()
{
var xmlhttp;
if(window.XMLHttpRequest)
{
//code for IE7+,Firefox,Chrome,Opera,Safari
xmlhttp=new XMLHttpRequest();
}
else
{
//code for IE6,IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if(xmlhttp.readyState==4 && xmlhttp.status==200)
{
//將接收到的字符串存入jsonstr
var jsonstr = xmlhttp.responseText;
alert("json:"+jsonstr);
// 將jsonstr轉換爲json對象 json
var json = JSON.parse(jsonstr);
alert(json["A"]);
var formid = "form1";
alert("調用get_json,傳參json對象和form的id");
get_json(json,formid);
}
}
xmlhttp.open("GET","cgi-bin/ajax3.cgi?get_info",true);
xmlhttp.send();
}
</script>
</head>
<body>
<h3>後臺CGI如何把數據返回到網頁的指定控件顯示:</h3>
<input type="submit" value="get_info" onclick="get_info()" />
<form id="form1">
<p>建議:<span id="A" ></span></p>
<p>說明:<span id="B" ></span></p>
</form>
</body>
</html>
ajax3.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "cgic.h"
#include "cgi_main.h"
int cgiMain(void)
{
char *lenstr;
int fd_webdata=-1;
if(lenstr=getenv("QUERY_STRING"))
{
}
else
{
}
printf("Content type: text/html\n\n");
char ip[20] = "192.168.10.1";
char prot[6] = "8080";
if(strstr(lenstr,"get_info") != NULL)
{
printf("{\"A\":\"%s\",\"B\":\"%s\"}",ip,prot);
}
//最後記得關閉文件
close(fd_webdata);
return 0;
}