Griefforyou [原文]
GUI 博士:
XML について質問があります。 XMLHTTP 経由で ASP ページを公開し、データを HTML として送り返し、div、table セル、または任意の要素で object.innerHTML を実行します。
私が抱えている問題は、ASP サーバー ページでフォームを作成し、そのフォームを HTML として送り返すと、すべてが正常に動作することです。ただし、クライアント側でページを検証することも必要なので、送り返す予定の応答 HTML の本文に JScript ページのリンクを挿入します。これを実行すると、スクリプトは実行されなくなります。
実際の JScript src 参照を親ページに含めると、正常に動作します。これは、JScript コードがランタイムに読み込まれていないためですか? JScript コードを返さずに XMLHTTP 投稿に応答し、それを機能させることは可能ですか?作成したページに対して JScript 関数をオンザフライで生成できますか?
これを試したことのないもう 1 つの方法は、XMLHTTP 経由で XML データをポストし、それを XML データとして送り返し、XSL スタイルシートを使用して変換することです。 JScript 関数をそのように定義することは可能だと思います。しかし、このアプローチは複雑すぎるように思えます。何か提案や答えはありますか?
Peter Sung
GUI博士からの返信
に感謝します
。はい、Peter、XMLHTTP post/get への応答として Microsoft JScript コードを返し、そのコードを実行することができます。これを行うことは、ケーキを一口買って後で食べるようなものです。ご想像のとおり、これを行うための最良の方法は、XSL スタイルシートを利用することです。すべての型を通常に戻せば、これは簡単です。 Dr. GUI では簡単な例も提供できます。 (もちろん、他の解決策もあります。応答に正しいヘッダーと文字が正しい順序で含まれている限り、ブラウザーは応答を解釈して、応答が正しく機能するようにします。必要に応じて、文字列の連結を利用して応答を生成できます。 )
以下の例では、Dr. GUI はクライアント側のコードに JScript を使用し、ASP ページで VBScript (Microsoft Visual Basic Scripting Edition) を使用しています。採用された戦略は次のとおりです。XML ファイルにはデータ (およびスタイル シートへの参照) のみが含まれます。 XSL ファイルには、完全なページを形成するために必要なすべての HTML フォーマットが含まれています (所定のスクリプトを含む)。 ASP ページは基本的に、XMLHTTP オブジェクトを作成し、(暗黙的なスタイル シートを使用して) XML ファイルをオブジェクトにロードし、結果の HTML を応答ストリームに書き込むためのいくつかの呼び出しで構成されます。
この方法を試すには、以下に示す簡単な手順に従ってください。メモ帳を使用して、すべてのファイルをコピーして貼り付け、c:inetpubwwwroot に保存します。
1.
次の XML テキストを含む Books.xml という名前のファイルを作成します。 Books.xsl スタイル シートへの参照をメモします。それ以外は、このファイルにはデータのみが含まれます。
<?xml バージョン="1.0"?>
<?xml-stylesheet type="text/xsl" href="books.xsl" ?>
<カタログ>
<book id="bk101">
<著者>マシュー ガンバルデラ</著者>
<title>XML 開発者ガイド</title>
</本>
<book id="bk102">
<著者>キム・ラルズ</著者>
<title>真夜中の雨</title>
</本>
</カタログ>
2.
次に、次のコードを含む Books.xsl という名前のファイルを作成します。このファイルは、手順 1 で作成したbooks.xml によって参照されるスタイル シートです。これには、上記の XML ファイルを HTML ページに正しくフォーマットするために必要な情報が含まれており、さらに HTML ページにスクリプトを含めることもできます。
<?xml バージョン="1.0" エンコーディング="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl=" http://www.w3.org/1999/XSL/Transform ">
<xsl:outputメソッド="html" indent="yes"/>
<xsl:template match="/">
<html>
<頭>
<title>テスト</title>
</head>
<スクリプト言語="JScript">
関数 Test_OnLoad()
{
var objXML = new ActiveXObject("MSXML2.DOMDocument");
objXML.async=false;
objXML.load("books.xml");
アラート(objXML.xml);
objXML=null;
}
</script>
<body onload="Test_OnLoad()">
<テーブルボーダー="1">
<xsl:for-each select="カタログ/ブック">
<tr>
<td>
<xsl:value-of select="author"/>
</td>
<td>
<xsl:value-of select="title"/></td>
</tr>
</xsl:for-each>
</テーブル>
</body>
</html>
</xsl:テンプレート>
</xsl:スタイルシート>
3.
最後に、次のコードを含む Books.asp という名前のファイルを作成します。このファイルは、XMLHTTP オブジェクトの作成、その XML ファイルのロード、および結果の HTML の応答ストリームへの書き込みにのみ使用されます。
<%
薄暗い
Response.contentType = "テキスト/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 を含むデータを示すアラートが表示されます。これは、XSL ファイル内のスクリプトによって行われます。また、Web ページ上の表には、データがきちんとフォーマットされて表示されます。これは XSL コードによって行われます。