明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

創(chuàng)建具有JScript的HTML的XMLHTTP

[摘要]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 代碼完成的。