在浏覽網頁時,有時往往因為檢視局部資訊,而導緻整個網頁都需要從伺服器端重新加載一次。在傳統的web實作方式中,實作類似的效果必須進行整個頁面的重新整理。但是借助Ajax技術,可以實作對頁面中局部區域的動态重新整理,使得使用者能夠以更好的方式獲得最新的資料資訊。隻更新需要檢視的資訊,頁面中的其他資訊保持不變。局部動态更新時Ajax技術的隻要功能表現之一。
現在建立一個執行個體,以示範使用Ajax技術局部動态更新資料。該執行個體主要是删除Access資料庫記錄。在删除過程中,隻删除指定記錄,而不影響顯示的其他待删除記錄。
1, accessConnection.java
此類用于資料庫操作,執行删除語句,傳回查詢結果集,打開記事本,輸入下列代碼:
[html]
view
plain
copy- package com.njue.DBManager;
- import java.io.File;
- import java.sql.*;
- public class accessConnection {
- ResultSet r;
- public accessConnection(String delSql,String sql) throws ClassNotFoundException, SQLException {
- String dbUr1="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=E:"+File.separator+"dataAnalysis"+File.separator+"test.mdb";
- String user="";
- String password="";
- Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
- Connection c=DriverManager.getConnection(dbUr1,user,password);
- Statement s=c.createStatement();
- if(delSql!=null){
- s.executeUpdate(delSql);
- }
- r=s.executeQuery("SELECT NAME "+"FROM test");
- // s.close();
- }
- public ResultSet getResult(){
- return r;
- }
- /*
- 其實最重要的一條語句就是:
- String dbUr1="jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=E:"+File.separator+"dataAnalysis"+File.separator+"test.mdb";
- 這個路徑的要求是極為嚴格的,隻允許Microsoft Access Driver這三個單詞中間各有一個空格,其他地方絕不允許出現空格,還望各位道友仔細檢查。
- 還有一點就是File.separator,由于不同的作業系統的分隔符可能不一樣,況且我們這裡直接用E:\dataAnalysis\test.mdb的話,你可能要再加一個反斜杠去進行轉義,為了避免麻煩,是以我們直接用File.separator自動擷取系統預設的分隔符。
- 好了,就如此簡單,希望對大家有用!
- */
2, 伺服器端代碼
聲明accessConnection.java類,調用getResult()方法得到結果集,然後使用while循環将擷取資料庫的資料儲存到字元串content中,最後将content字元串以XML檔案的形式輸出用戶端。代碼如下:
- <%@ page contentType="text/html; charset=utf-8" import="java.sql.*,com.njue.DBManager.*" errorPage="" %>
- <%
- String id=request.getParameter("name");
- String delSql=null;
- StringBuffer content=new StringBuffer("");
- response.setContentType("text/xml");
- response.setHeader("Cache-Control","no-cache");
- content.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
- content.append("<contents>");
- if(id!=null){
- id=new String(id.getBytes("ISO-8859-1"), "GBK");
- delSql="delete from test where NAME='"+id+"'";
- }
- try{
- ResultSet rs=new accessConnection(delSql,null).getResult();
- while(rs.next()){
- String name=rs.getString(1);
- content.append("<content>");
- content.append("<name>"+ name +"</name>");
- content.append("</content>");
- }
- catch(Exception e){
- e.printStackTrace();
- }
- content.append("</contents>");
- out.print(content);
- %>
将上述代碼儲存,我這裡儲存的名稱為index.jsp。
3, 用戶端代碼
用戶端代碼主要實作異步傳送資料的顯示樣式。打開記事本,輸入下列代碼:
- <%@ page contentType="text/html; charset=GBK" import="java.sql.*" errorPage="" %>
- <html>
- <head>
- <script type="text/javascript">
- var xmlHttp;
- var id;
- function createXMLHttpRequest(){
- if(window.ActiveXObject) {
- xmlHttp= new ActiveXObject("Microsoft.XMLHTTP");//建立XMLHttpRequet對象
- else if (window.XMLHttpRequest) {
- xmlHttp=new XMLHttpRequest();//建立XMLHttpRequet對象
- function startRequest(ele) {
- id=ele.id;
- createXMLHttpRequest();
- xmlHttp.onreadystatechange=handleStateChange;
- xmlHttp.open("POST", "index.jsp?name="+id, true);
- xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
- xmlHttp.send(null);
- alert(str);
- }
- function handleStateChange() {
- if(xmlHttp.readyState==4) {
- if(xmlHttp.status==200) {
- show();
- function validate(){
- xmlHttp.open("GET", "index.jsp", true);
- function show(){
- var xmlDoc=xmlHttp.responseXML;
- var yan=xmlDoc.getElementsByTagName("content");
- var ta="<table border=1 width=45% align=center id=ta><tr><td>使用者名稱</td><td>操作</td></tr>";
- for(var i=0;i<yan.length;i++){
- var y=yan[i];
- var name=y.childNodes[0].firstChild.data;
- ta+="<tr id='aa'><td width=30%>"+name+"</td>";
- ta+="<td><p id="+name+" style='color:green;' onclick='startRequest(this)'><u>删除</u></p></td></tr>";
- ta+="</table>";
- document.getElementById("res").innerHTML=ta;
- //alert(yan.length);
- </script>
- </head>
- <body onLoad="validate()">
- <div id="res"></div>
- </body>
将上述代碼儲存,名稱為Del.jsp。在該檔案中,createXMLRequest()函數主要是用于建立XMLHttpRequest異步對象,validate()函數項伺服器發送異步請求,該請求主要完成資料庫記錄的顯示功能。Callback()函數主要用于處理伺服器端的傳回資料,即調用show()函數用于設定資料的顯示樣式。Show()函數主要是解析伺服器端傳回的XML檔案,并解析XML檔案中的資料,最後以指定樣式顯示在目前頁。StartRequest()函數也是用于向伺服器發送異步請求,但該請求主要完成删除指定資料庫記錄。在目前網頁被加載時,就會執行validate()函數。
4, 運作效果
運作前:
删除後: