|
通過 XMLHTTP 的客戶端腳本
在進行 Internet 或基于 Windows 的開發(fā)方面,您遇到過問題或難題嗎?這時,您可以求助于 GUI 博士 (drgui@microsoft.com);GUI 博士每個月會兩次做客 MSDN,在線回答您的問題。雖然博士忙碌的工作安排使他無法回復(fù)所有的問題,但他會盡可能地在這里回答更多的問題。如果恰好選中了您的問題,那么博士會送您一件 GUI 博士 T 恤衫!
摘要:介紹了利用客戶端腳本編寫來創(chuàng)建網(wǎng)頁的方法,即使用系統(tǒng)的 XMLHTTP 對象、XML 文件和 XSL 樣式表來包含格式和腳本。
Dr. GUI's Bits and Bytes
這是 GUI 博士的網(wǎng)絡(luò)日記的標題。遺憾的是,最近博士還沒有為此專欄添加更多的內(nèi)容?赡苁且驗槲餮艌D下雨太多,或者天氣太冷,或者陽光太猛烈,再或者是被某些事情給耽擱了。
但您可能會喜歡閱讀那里的 Alice in Blibbetland 故事。或者是長篇大論的倒霉蛋兒 iLoo。
總之,如果您有話要說,請在當天的意見欄上發(fā)表您的評論。或者給 GUI 博士寫封電子郵件...
現(xiàn)在,開始解答您的問題!
創(chuàng)建具有 JScript 的 HTML 的 XMLHTTP
親愛的 GUI 博士:
我有一個關(guān)于 XML 的問題。我通過 XMLHTTP 發(fā)布一個 ASP 頁面,將數(shù)據(jù)作為 HTML 發(fā)送回來,并在 div、表格單元格或任何元素上執(zhí)行 object.innerHTML。
我遇到的問題是,有一次,我在 ASP 服務(wù)器頁上創(chuàng)建一個表單,并將該表單以 HTML 發(fā)送回去,這樣做一切正常。但我還希望對該頁面進行客戶端驗證,因此我將一個 JScript 頁面鏈接放到了我打算發(fā)送回去的響應(yīng) HTML 的正文中。這樣做以后,腳本就無法運行了。
當我在父頁上包括實際的 JScript src 引用時,它可以正常運行。這是因為 JScript 代碼沒有加載到運行庫嗎?能否在響應(yīng) XMLHTTP post 時不返回 JScript 代碼并使它正常工作?可以為所創(chuàng)建的頁面即時生成 JScript 函數(shù)嗎?
我還沒有嘗試用另一種方式這樣做:通過 XMLHTTP 發(fā)布 XML 數(shù)據(jù),然后將它作為 XML 數(shù)據(jù)發(fā)送回去,再使用 XSL 樣式表進行轉(zhuǎn)換。我猜想,可以用那種方式定義 JScript 函數(shù)。但這種方式似乎太繁雜了。您有任何建議或答案嗎?
謝謝
Peter Sung
GUI 博士的回復(fù):
是的,Peter,您可以在響應(yīng) XMLHTTP post/get 時返回 Microsoft JScript 代碼,并使該代碼得到執(zhí)行。這樣做就像先拿到一塊蛋糕,然后再吃掉它。正像您猜想得那樣,這樣做的最佳方式是利用 XSL 樣式表;一旦您使所有類型恢復(fù)正常,這很容易。GUI 博士甚至可以提供一個快捷的示例。(當然,也有其他的解決方案。只要響應(yīng)按正確的順序包含正確的標頭和字符,瀏覽器將解譯響應(yīng),以便響應(yīng)正常工作。如果需要,您可以利用字符串連接生成響應(yīng)。)
在下面的示例中,GUI 博士在 ASP 頁中將 JScript 用于客戶端代碼和 VBScript(Microsoft Visual Basic 腳本編寫版)。采用的策略是這樣的:XML 文件只包含數(shù)據(jù)(以及對樣式表的引用)。XSL 文件包含構(gòu)成完整頁面所必需的所有 HTML 格式(包括位于適當位置的腳本)。ASP 頁主要包含幾個調(diào)用,以創(chuàng)建 XMLHTTP 對象,將 XML 文件載入該對象中(利用隱式樣式表),并將結(jié)果 HTML 寫入響應(yīng)流。
要試用這種方法,請執(zhí)行下面所示的簡單步驟。使用記事本復(fù)制和粘貼,并將所有文件保存在 c:\inetpub\wwwroot 中。
1. 創(chuàng)建一個包含以下 XML 文本且名為 books.xml 的文件。記下對 books.xsl 樣式表的引用。除此之外,此文件只包含數(shù)據(jù)。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="books.xsl" ?> <catalog> <book id="bk101"> <author>Gambardella, Matthew</author> <title>XML Developer's Guide</title> </book> <book id="bk102"> <author>Ralls, Kim</author> <title>Midnight Rain</title> </book> </catalog>
2. 然后,創(chuàng)建一個包含以下代碼且名為 books.xsl 的文件。此文件是第 1 步中創(chuàng)建的 books.xml 所引用的樣式表。它包含將上面的 XML 文件正確地格式化為 HTML 頁所必需的信息,甚至在該 HTML 頁上包括腳本。
<?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" indent="yes"/> <xsl:template match="/"> <html> <head> <title>Test</title> </head> <script language="JScript"> function Test_OnLoad() { var objXML = new ActiveXObject("MSXML2.DOMDocument"); objXML.async=false; objXML.load("books.xml"); alert(objXML.xml); objXML=null; } </script> <body onload="Test_OnLoad()"> <table border="1"> <xsl:for-each select="catalog/book"> <tr> <td> <xsl:value-of select="author"/> </td> <td> <xsl:value-of select="title"/></td> </tr> </xsl:for-each>
</body> </html> </xsl:template> </xsl:stylesheet>
3. 最后,創(chuàng)建一個包含以下代碼且名為 books.asp 的文件。此文件只用于創(chuàng)建 XMLHTTP 對象,為其加載 XML 文件,并將結(jié)果 HTML 寫入響應(yīng)流。
<% dim sxh Response.contentType = "text/xml" set sxh = Server.CreateObject("MSXML2.XMLHTTP.3.0") sxh.open "GET","http://localhost/books.xml",false sxh.send Response.write sxh.responsetext %>
4. 打開您的瀏覽器,定位到 http://localhost/books.asp 頁。 5. 您會看到顯示包含 books.xml 數(shù)據(jù)的警報。這是由 XSL 文件中的腳本完成的。您還會在網(wǎng)頁上的一個表中看到格式整齊的數(shù)據(jù)。這是由 XSL 代碼完成的。
致謝!
GUI 博士在此感謝出色的專家小組,包括 Vijaya Byri 及其專門助手 Maura Baughman。如果 GUI 博士在回答問題時沒有大家的幫助,問題的解答就不會這么令人滿意。
向 GUI 博士請教
著名的問題解決專家“GUI 博士”很高興在 Internet 和基于 Windows 的開發(fā)方面提供百科全書式的知識,使各地的開發(fā)人員從中受益。如果您有無法解決的問題,請將您的疑問發(fā)送到 drgui@microsoft.com。雖然博士忙碌的工作安排使他無法回復(fù)所有的問題,但他會盡可能地在這里回答更多的問題。如果恰好選中了您的問題,那么博士會送您一件 GUI 博士 T 恤衫。ㄕ堊⒁猓簡栴}可能經(jīng)過整理,以確保語法正確,邏輯清晰。)
GUI 博士提供的知識還不夠多?請閱讀 GUI .NET 博士專欄文章!
|