AJAX 可用來與數(shù)據(jù)庫進(jìn)行動態(tài)地通信。
在下面的 AJAX 例子中,我們將演示如何使用 AJAX 技術(shù)令網(wǎng)頁從數(shù)據(jù)庫讀取信息。
上面的實例包含了一個簡單的 HTML 表單以及執(zhí)行 JavaScript 的鏈接:
<html> <head><script src="selectcustomer.js"></script>
</head> <body><form>
請選擇一位客戶: <selectname="customers" onchange="showCustomer(this.value)"
> <option value="ALFKI">Alfreds Futterkiste <option value="NORTS ">North/South <option value="WOLZA">Wolski Zajazd </select></form>
<p> <divid="txtHint"
><b>客戶信息將在此處列出。</b></div> </p> </body> </html>
正如您看到的,這是一個簡單的帶有一個名為 "customers" 下拉列表的 HTML 表單。
表單以下的段落包含了一個名為 "txtHint" 的 div,這個 div 充當(dāng)了由 web 服務(wù)器所取回的信息的位置占位符。
當(dāng)用戶選擇數(shù)據(jù)時,名為 "showCustomer()" 的函數(shù)會被執(zhí)行。函數(shù)的執(zhí)行會被 "onchange" 事件觸發(fā)。另外需要說明的是:每當(dāng)用戶改變下拉列表中的值,函數(shù) showCustomer 就會被調(diào)用。
下面列出了 JavaScript 代碼。
這是存儲在文件 "selectcustomer.js" 中的 JavaScript 代碼:
var xmlHttpfunction showCustomer(str)
{ xmlHttp=GetXmlHttpObject(); if (xmlHttp==null) { alert ("您的瀏覽器不支持AJAX!"); return; } var url="getcustomer.asp"; url=url+"?q="+str; url=url+"&sid="+Math.random(); xmlHttp.onreadystatechange=stateChanged; xmlHttp.open("GET",url,true); xmlHttp.send(null); }function stateChanged()
{ if (xmlHttp.readyState==4) { document.getElementById("txtHint").innerHTML=xmlHttp.responseText; } }function GetXmlHttpObject()
{ var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; }
這個被 JavaScript 調(diào)用的服務(wù)器頁面,是一個名為 "getcustomer.asp" 的簡單的 ASP 文件。
此頁面使用 VBScript 針對 IIS 編寫?梢允褂 PHP 或其他服務(wù)器語言對它進(jìn)行改寫。
此代碼可運行針對某個數(shù)據(jù)庫的 SQL,并以 HTML 表格返回結(jié)果:
<% response.expires=-1 sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID=" sql=sql & "'" & request.querystring("q") & "'" set conn=Server.CreateObject("ADODB.Connection") conn.Provider="Microsoft.Jet.OLEDB.4.0" conn.Open(Server.Mappath("/db/northwind.mdb")) set rs = Server.CreateObject("ADODB.recordset") rs.Open sql, conn response.write("<table>") do until rs.EOF for each x in rs.Fields response.write("<tr><td><em>" & x.name & "</em></td>") response.write("<td>" & x.value & "</td></tr>") next rs.MoveNext loop response.write("</table>")