網頁自動重新整理功能在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檔案進行解析,並擷取返回資料,顯示在當前頁面。
例2
下是包含頁面,包含背景第一個頁面中ajax.asp:
代碼如下 |
複製代碼 |
<script type="text/javascript"> <!-- //建立XMLHttpRequest對象 var xmlhttp; try{ xmlhttp= new ActiveXObject('Msxml2.XMLhttp'); }catch(e){ try{ xmlhttp= new ActiveXObject('Microsoft.XMLhttp'); }catch(e){ try{ xmlhttp= new XMLHttpRequest(); }catch(e){} } } function getPart(url){ xmlhttp.open("get",url,true); xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState == 4) { if(xmlhttp.status == 200) { if(xmlhttp.responseText!=""){ document.getElementById("partdiv").innerHTML = unescape(xmlhttp.responseText); } else { document.getElementById("partdiv").innerHTML = "資料載入出錯"; } } } } xmlhttp.setRequestHeader("If-Modified-Since","0"); xmlhttp.send(null); } setInterval("getPart('ordersound.asp')",50000); //--> </script> <div id="partdiv" style="display:none;"></div> |
然後我們做一個訂單查詢頁面,比較簡單,都會做
新訂單查詢頁面:
代碼如下 |
複製代碼 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>訂單查詢頁面</title> </head> <body> <!--#include file="ajax.asp"--> <% sqlstr = "select count(*) as ccc from yxb_order where OrderStatus=1" set rs = conn.execute(sqlstr) if not rs.bof or not rs.eof then response.write "<bgsound src='提示音效檔.wav' loop='1'>" end if rs.close set rs = nothing %> </body> </html> |
例3,上面都是原生態的ajax,下面介紹一個jquery實現方法
代碼如下 |
複製代碼 |
<div class="le_top" id="ajaxlogin"> </div> |
jquery ajax我們使用load即可
代碼如下 |
複製代碼 |
$('#ajaxlogin').load('ajaxlogin.php?cityid=1208'); |
這樣載入成功就會把內容給ajaxlogin了哦,比起上面兩種jquery ajax方便簡潔多了哦。