創(chuàng)建具有JScript的HTML的XMLHTTP
發(fā)表時(shí)間:2024-02-06 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]griefforyou [原作] 親愛(ài)的 GUI 博士:我有一個(gè)關(guān)于 XML 的問(wèn)題。我通過(guò) XMLHTTP 發(fā)布一個(gè) ASP 頁(yè)面,將數(shù)據(jù)作為 HTML 發(fā)送回來(lái),并在 div、表格單元格或任何元素上執(zhí)行 object.innerHTML。我遇到的問(wèn)題是,有一次,我在 ASP 服務(wù)器頁(yè)上創(chuàng)建一個(gè)...
griefforyou [原作]
親愛(ài)的 GUI 博士:
我有一個(gè)關(guān)于 XML 的問(wèn)題。我通過(guò) XMLHTTP 發(fā)布一個(gè) ASP 頁(yè)面,將數(shù)據(jù)作為 HTML 發(fā)送回來(lái),并在 div、表格單元格或任何元素上執(zhí)行 object.innerHTML。
我遇到的問(wèn)題是,有一次,我在 ASP 服務(wù)器頁(yè)上創(chuàng)建一個(gè)表單,并將該表單以 HTML 發(fā)送回去,這樣做一切正常。但我還希望對(duì)該頁(yè)面進(jìn)行客戶端驗(yàn)證,因此我將一個(gè) JScript 頁(yè)面鏈接放到了我打算發(fā)送回去的響應(yīng) HTML 的正文中。這樣做以后,腳本就無(wú)法運(yùn)行了。
當(dāng)我在父頁(yè)上包括實(shí)際的 JScript src 引用時(shí),它可以正常運(yùn)行。這是因?yàn)?JScript 代碼沒(méi)有加載到運(yùn)行庫(kù)嗎?能否在響應(yīng) XMLHTTP post 時(shí)不返回 JScript 代碼并使它正常工作?可以為所創(chuàng)建的頁(yè)面即時(shí)生成 JScript 函數(shù)嗎?
我還沒(méi)有嘗試用另一種方式這樣做:通過(guò) XMLHTTP 發(fā)布 XML 數(shù)據(jù),然后將它作為 XML 數(shù)據(jù)發(fā)送回去,再使用 XSL 樣式表進(jìn)行轉(zhuǎn)換。我猜想,可以用那種方式定義 JScript 函數(shù)。但這種方式似乎太繁雜了。您有任何建議或答案嗎?
謝謝
Peter Sung
GUI 博士的回復(fù):
是的,Peter,您可以在響應(yīng) XMLHTTP post/get 時(shí)返回 Microsoft JScript 代碼,并使該代碼得到執(zhí)行。這樣做就像先拿到一塊蛋糕,然后再吃掉它。正像您猜想得那樣,這樣做的最佳方式是利用 XSL 樣式表;一旦您使所有類型恢復(fù)正常,這很容易。GUI 博士甚至可以提供一個(gè)快捷的示例。(當(dāng)然,也有其他的解決方案。只要響應(yīng)按正確的順序包含正確的標(biāo)頭和字符,瀏覽器將解譯響應(yīng),以便響應(yīng)正常工作。如果需要,您可以利用字符串連接生成響應(yīng)。)
在下面的示例中,GUI 博士在 ASP 頁(yè)中將 JScript 用于客戶端代碼和 VBScript(Microsoft Visual Basic 腳本編寫(xiě)版)。采用的策略是這樣的:XML 文件只包含數(shù)據(jù)(以及對(duì)樣式表的引用)。XSL 文件包含構(gòu)成完整頁(yè)面所必需的所有 HTML 格式(包括位于適當(dāng)位置的腳本)。ASP 頁(yè)主要包含幾個(gè)調(diào)用,以創(chuàng)建 XMLHTTP 對(duì)象,將 XML 文件載入該對(duì)象中(利用隱式樣式表),并將結(jié)果 HTML 寫(xiě)入響應(yīng)流。
要試用這種方法,請(qǐng)執(zhí)行下面所示的簡(jiǎn)單步驟。使用記事本復(fù)制和粘貼,并將所有文件保存在 c:\inetpub\wwwroot 中。
1.
創(chuàng)建一個(gè)包含以下 XML 文本且名為 books.xml 的文件。記下對(duì) 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)建一個(gè)包含以下代碼且名為 books.xsl 的文件。此文件是第 1 步中創(chuàng)建的 books.xml 所引用的樣式表。它包含將上面的 XML 文件正確地格式化為 HTML 頁(yè)所必需的信息,甚至在該 HTML 頁(yè)上包括腳本。
<?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>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
3.
最后,創(chuàng)建一個(gè)包含以下代碼且名為 books.asp 的文件。此文件只用于創(chuàng)建 XMLHTTP 對(duì)象,為其加載 XML 文件,并將結(jié)果 HTML 寫(xiě)入響應(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.
打開(kāi)您的瀏覽器,定位到 http://localhost/books.asp 頁(yè)。
5.
您會(huì)看到顯示包含 books.xml 數(shù)據(jù)的警報(bào)。這是由 XSL 文件中的腳本完成的。您還會(huì)在網(wǎng)頁(yè)上的一個(gè)表中看到格式整齊的數(shù)據(jù)。這是由 XSL 代碼完成的。