與 responsetext 以字符串返回 http 響應不同,responsexml 以 xml 返回響應。
responsexml 屬性返回 xml 文檔對象,可使用 w3c dom 節點樹的方法和屬性來檢查和解析該對象。
在下面的 ajax 實例中,我們將演示網頁如何使用 ajax 技術從數據庫中讀取信息。這次,這些從數據庫中選取的數據將被轉換為 xml 文檔,然后我們將使用 dom 來提取要顯示的值。
上面的例子包含一個 html 表單,若干個保留所返回數據的 <span> 元素,以及指向一段 javascript 的鏈接:
<html><head><script src="selectcustomer_xml.js"></script>
</head><body><form action="">
<label>選擇客戶:<selectname="customers" onchange="showcustomer(this.value)"
><option value="alfki">alfreds futterkiste</option><option value="norts ">north/south</option><option value="wolza">wolski zajazd</option></select></label></form>
<b><span id="companyname"></span></b><br /><span id="contactname"></span><br /><span id="address"></span><span id="city"></span><br/><span id="country"></span></body></html>
上面的例子包含了一個 html 表單,該表單帶有一個名為 "customers" 下拉框。
當用戶選取下拉框中的客戶時,函數 "showcustomer()" 就會被執行。事件 "onchange" 會觸發該函數執行。換句話說,每當用戶改變下拉框中的值時,函數 showcustomer() 就會被調用。
下面列出了 javascript 代碼。
這是存儲在文件 "selectcustomer_xml.js" 中的 javascript 代碼:
var xmlhttpfunction showcustomer(str){ xmlhttp=getxmlhttpobject();if (xmlhttp==null) { alert ("your browser does not support ajax!"); return; }var url="getcustomer_xml.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){var xmldoc=xmlhttp.responsexml.documentelement;document.getelementbyid("companyname").innerhtml=xmldoc.getelementsbytagname("compname")[0].childnodes[0].nodevalue;document.getelementbyid("contactname").innerhtml=xmldoc.getelementsbytagname("contname")[0].childnodes[0].nodevalue;document.getelementbyid("address").innerhtml=xmldoc.getelementsbytagname("address")[0].childnodes[0].nodevalue;document.getelementbyid("city").innerhtml=xmldoc.getelementsbytagname("city")[0].childnodes[0].nodevalue;document.getelementbyid("country").innerhtml=xmldoc.getelementsbytagname("country")[0].childnodes[0].nodevalue;}}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;}
showcustomer() 和 getxmlhttpobject() 與上一節相同。statechanged() 函數稍早前也在本教程中使用過。不過,這次我們通過 responsexml 以 xml 文檔返回結果,并使用 dom 來提取要顯示的值。
這個被 javascript 調用的服務器頁面,是名為 "getcustomer_xml.asp" 的簡單 asp 文件。
該頁面使用 vbscript 編寫,針對 internet 信息服務器 (iis)??梢杂?php 或其他服務器語言,簡單地重寫該頁面。
請看在 php 中對應的例子(測試:缺具體頁面)。
這段代碼執行針對數據庫的 sql 查詢,并以 xml 文檔返回結果:
<%response.expires=-1response.contenttype="text/xml"sql="select * from customers "sql=sql & " where customerid='" & request.querystring("q") & "'"on error resume nextset 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, connif err <> 0 thenresponse.write(err.description)set rs=nothingset conn=nothingelseresponse.write("<?xml version='1.0' encoding='iso-8859-1'?>")response.write("<company>")response.write("<compname>" &rs.fields("companyname")& "</compname>")response.write("<contname>" &rs.fields("contactname")& "</contname>")response.write("<address>" &rs.fields("address")& "</address>")response.write("<city>" &rs.fields("city")& "</city>")response.write("<country>" &rs.fields("country")& "</country>")response.write("</company>")end ifon error goto 0%>
請注意上面的 asp 代碼中的第二行:response.contenttype="text/xml"。contenttype 屬性為 response 對象設置了 http 內容類型。該屬性的默認值是 "text/html"。這次我們把內容類型設置為 xml。
然后我們從數據庫中選取數據,并使用這些數據構建 xml 文檔。
新聞熱點
疑難解答
圖片精選