網頁自動刷新功能在web網站上已經屢見不鮮了,如即時新聞信息,股票信息等,都需要不斷獲取最新信息。在傳統的web實現方式中,想要實現類似的效果,必須進行整個頁面的刷新,在網絡速度受到一定限制的情況下,這種因為一個局部變動而牽動整個頁面的處理方式顯得有些得不償失。Ajax技術的出現很好的解決了這個問題,利用Ajax技術可以實現網頁的局部刷新,只更新指定的數據,并不更新其他的數據。
現在創建一個實例,以演示網頁的自動刷新功能,該實例模擬火車侯票大廳的顯示字幕。
1,服務器端代碼
該實例服務器端代碼的功能比較簡單,即產生一個隨機數,并以XML文件形式返回給客戶端。打開記事本,輸入下列代碼:
<%@ page contentType="text/html; charset=gb2312" %>
<%
response.setContentType("text/xml; charset=UTF-8");//設置輸出信息的格式及字符集
response.setHeader("Cache-Control","no-cache");
out.println("<response>");
for(int i=0;i<2;i++){
out.println("<name>"+(int)(Math.random()*10)+"</name>");
out.println("<count>" +(int)(Math.random()*100)+ "</count>");
}
out.println("</response>");
out.close();
%>
保存上述代碼,名稱為auto.jsp。在該文件中,使用java.lang包中的Math類,產生一個隨機數。
2,客戶端代碼
本實例客戶端代碼主要利用服務器端返回的數字,指定顯示樣式。打開記事本,輸入下列代碼
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<head>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
</head>
<script language="javascript">
var XMLHttpReq;
//創建XMLHttpRequest對象
function createXMLHttpRequest() {
if(window.XMLHttpRequest) { //Mozilla 瀏覽器
XMLHttpReq = new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE瀏覽器
try {
XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}
}
//發送請求函數
function sendRequest() {
createXMLHttpRequest();
var url = "auto.jsp";
XMLHttpReq.open("GET", url, true);
XMLHttpReq.onreadystatechange = processResponse;//指定響應函數
XMLHttpReq.send(null); // 發送請求
}
// 處理返回信息函數
function processResponse() {
if (XMLHttpReq.readyState == 4) { // 判斷對象狀態
if (XMLHttpReq.status == 200) { // 信息已經成功返回,開始處理信息
DisplayHot();
setTimeout("sendRequest()", 1000);
} else { //頁面不正常
window.alert("您所請求的頁面有異常。");
}
}
}
function DisplayHot() {
var name = XMLHttpReq.responseXML.getElementsByTagName("name")[0].firstChild.nodeValue;
var count = XMLHttpReq.responseXML.getElementsByTagName("count")[0].firstChild.nodeValue;
document.getElementById("cheh").innerHTML = "T-"+name+"次列車";
document.getElementById("price").innerHTML = count+"元";
}
</script>
<body onload =sendRequest()>
<table style="BORDER-COLLAPSE: collapse" borderColor=#5555555 cellSpacing=0 cellPadding=0 width=200 border=0>
<TR>
<TD align=middle bgColor=#abc2d0 height=19 colspan="2"><B>開往北京的列車</B> </TD>
</TR>
<tr>
<td height="20"> 車號:</td>
<td height="20" id="cheh"> </td>
</tr>
<tr>
<td height="20"> 價格:</td>
<td height="20" id="price"> </td>
</tr>
</table>
</body>
將上述代碼保存,名稱為autoRefresh.jsp。在該文件中,createXMLHttpRequest()函數用于創建異步調用對象;sendRequest()函數用于發送請求到客戶端;processResponse()函數用于處理服務器端的響應,在處理過程中調用DisplayHot()函數設定數據的顯示樣式。其中,setTimeout(“sendRequest()”,1000)函數的含義為每隔1秒的時間調用sendRequest()函數,該函數在Ajax頁面刷新中起了一個主導作用。DisplayHot()函數主要用于從服務器端返回的XML文件進行解析,并獲取返回數據,顯示在當前頁面。