使用ajax+cgi,實現網頁如何把數據通過AJAX發給後臺CGI和後臺CGI如何把數據返回到網頁的指定控件顯示,小案例

相關說明

操作系統: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; 
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章