主要是看到網上的一篇部落格http://blog.csdn.net/fdemon/article/details/6358520#quote,照個這篇部落格確實現不了正確的結果。現修改如下:
1. 建立一個Html網頁檔案。檔案名稱:test.html
|
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>C+CGI+Ajax在S3C2440中的應用</title>
<script language="JavaScript" src="xmlhttpreq.js"></script>
</head>
<body>
<h3>擷取伺服器目前時間</h3>
<p>伺服器目前時間是:<div id="current_time"></div></p>
<input type="button" value="提交" onclick="sender()" />
</body>
</html> |
2. 建立一個Javascript指令檔,這個檔案實現了Ajax進行非同步訪問伺服器。檔案名稱:xmlhttpreq.js
|
/*
*建立非同步訪問對象
*/
function createXHR()
{
var xhr;
try
{
xhr = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(E)
{
xhr = false;
}
}
if (!xhr && typeof XMLHttpRequest != 'undefined')
{
xhr = new XMLHttpRequest();
}
return xhr;
}
/*
*非同步訪問提交處理
*/
function sender()
{
xhr = createXHR();
if(xhr)
{
xhr.onreadystatechange=callbackFunction;
//test.cgi後面跟個cur_time參數是為了防止Ajax頁面緩衝
xhr.open("GET", "cgi-bin/test.cgi?cur_time=" + new Date().getTime());
xhr.send(null);
}
else
{
//XMLHttpRequest對象建立失敗
alert("瀏覽器不支援,請更換瀏覽器。");
}
}
/*
*非同步回呼函數處理
*/
function callbackFunction()
{
if (xhr.readyState == 4)
{
if (xhr.status == 200)
{
var returnValue = xhr.responseText;
if(returnValue != null && returnValue.length > 0)
{
document.getElementById("current_time").innerHTML = returnValue;
}
else
{
alert("結果為空白。");
}
}
else
{
alert("頁面出現異常。");
}
}
} |
3. 建立伺服器端應用程式。檔案名稱:test.c
|
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
time_t current;
struct tm *timeinfo;
time(¤t);
timeinfo = localtime(¤t);
//這一句一定要加,否則非同步訪問會出現頁面異常
printf("Content type: text/html\n\n");
printf("%s", asctime(timeinfo));
} |
在Fedora 9的終端命令列編譯test.c,產生test.cgi檔案,如下:
arm-linux-gcc -o test.cgi test.c
4. 將test.html、xmlhttpreq.js兩個檔案下載到開發板的www目錄中。(註:www目錄是boa伺服器的主目錄。你可以在開發板的/etc/boa/boa.conf檔案的DocumentRoot節點配置成其他的目錄,那麼這三個檔案就下載到你配置的目錄中)。test.cgi放在cgi-bin目錄中這個目錄是boa的cgi配置目錄,請先確實這個目錄下的cgi能夠執行。
5. 把開發板串連上網路,在PC機上開啟瀏覽器並輸入:http://192.168.1.230/test.html(註:這個IP地址是你的開發板的IP,還有這個網段要跟PC的網段一致),運行效果,如圖:
點擊提交按鈕後,就會非同步訪問伺服器端cgi程式,擷取伺服器端的系統時間。可以看到按鈕在提交後瀏覽器並沒有重新整理就取回系統時間。運行效果圖如下:
以上是複製了網友的部分內容基礎上改過來的。