- - PR -
AjaxでのXSLT変換について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-06-19 12:02
現在、下記環境においてAjaxを使用したWebシステムを開発しています。
O/S Redhat Linux 8.0 (Kernel2.4.20-18) 言語 Perl 5.8.0 DB PostgreSQL 7.2.3 Webサーバ Apache 2.0.40 ブラウザ IE6のみ javaScriptでPerlから出力されるXMLイメージを サーバ側のXSLTファイルを用いて変換してHTMLとして表示しています。 ・変換方法↓ function loadTextFile(target) { targetNm = target; xmlhttp.abort(); xmlhttp.onreadystatechange = readystatechange; xmlhttp.open("GET", "../cgi-bin/" + target + ".cgi", true); xmlhttp.send(null); } function readystatechange(){ if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { var xml = xmlhttp.responseXML; var xslt = new ActiveXObject("Microsoft.XMLDOM"); xslt.async = false; xslt.load("../xslt/" + targetNm + ".xsl"); //XSLTロード targetNm = ""; var text = xml.transformNode(xslt); //HTMLイメージに変換 top.f_top.document.getElementById("result").innerHTML = text; } if ((xmlhttp.readyState == 4) && (xmlhttp.status == 404)) ・・・・・・・ } で以下のXSLTファイルを使用するとボタン「modify」押下時に起動するjavascript が動作せず。「オブジェクトを指定してください」エラーとなります。 XSLTソース↓ <?xml version="1.0" encoding="Shift_JIS"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:output method="html" encoding="UTF-8"/> <xsl:template match="/"> <HTML LANG="en"> <HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset="></META> <TITLE>Administration</TITLE> <script type = "text/javascript" src = "http://10.1.6.234/SHIMIZUTEST/js/aaa100010.js" ></script> ←@ </HEAD> <BODY CLASS="bodyimg" TOPMARGIN="0"> <DIV CLASS="title">Company Information</DIV> <FORM NAME="f102001" METHOD="POST"> <TABLE CLASS="SelCompHnd"> <TD WIDTH="100"> <tr> <INPUT TYPE="button" NAME="Add" CLASS="ButtonWhite" VALUE="Add" onClick="Goto()"></INPUT> </tr> </TD> </TABLE> <DIV STYLE="font-family:Verdana;font-size:8px;width:470px;overflow:auto;"> <TABLE CLASS="AdminTableFont" BORDER="1" cellspacing="0" cellpadding="4" FRAME="box"> <COLGROUP WIDTH="170"></COLGROUP> <COLGROUP WIDTH="90"></COLGROUP> <COLGROUP WIDTH="80"></COLGROUP> <COLGROUP WIDTH="70"></COLGROUP> <td> <TR> <TH CLASS="TblHead_admin" >Name</TH> <TH CLASS="TblHead_admin" >Abbreviation</TH> <TH CLASS="TblHead_admin" >Type</TH> <TH CLASS="TblHead_admin" >Modify</TH> </TR> </td> </TABLE> </DIV> <DIV STYLE="font-family:Verdana;font-size:8px;width:470px;height:352px;overflow:auto;"> <TABLE CLASS="AdminTableFont" BORDER="1" cellspacing="0" cellpadding="4" FRAME="box"> <COLGROUP WIDTH="170"></COLGROUP> <COLGROUP WIDTH="90"></COLGROUP> <COLGROUP WIDTH="80"></COLGROUP> <COLGROUP WIDTH="70"></COLGROUP> <xsl:for-each select="root/data/Company/record"> <tr> <td><xsl:value-of select="name"/></td> <td><xsl:value-of select="addreviation"/></td> <td><xsl:value-of select="type"/></td> <!--<td><xsl:apply-templates select="Modify"/></td>--> <td><input type="button" CLASS="ButtonWhite" name="Modify" value="Modify" onClick="{Modify}"/></td> </tr> </xsl:for-each> </TABLE> </DIV> </FORM> </BODY> </HTML> </xsl:template> <xsl:template match="Modify"> <xsl:element name="input"> <xsl:attribute name="type">button</xsl:attribute> <xsl:attribute name="name">Modify</xsl:attribute> <xsl:attribute name="value">Modify</xsl:attribute> <xsl:attribute name="CLASS">ButtonWhite</xsl:attribute> <xsl:attribute name="onClick"><xsl:value-of select="Modify"/></xsl:attribute> </xsl:element> </xsl:template> </xsl:stylesheet> 上記ソースの@の部分でjavascriptがサーバから参照できていないと思うのですが、 XSLT&Ajaxの知識が未熟なため原因がわかりません。 new ActiveXObject("Microsoft.XMLDOM"); を使用する際にこういう現象がおきるのでしょうか? どなたかご教授いただきたく。 お願いいたします|(__)| | ||||
|
投稿日時: 2006-06-19 14:02
デバッグ出力
<td><input type="button" CLASS="ButtonWhite" name="Modify" value="Modify" onClick="{Modify}"/> ONCLICK=<xsl:value-of select="Modify"/> </td> [ メッセージ編集済み 編集者: MMX 編集日時 2006-06-19 14:11 ] | ||||
|
投稿日時: 2006-06-19 15:49
ご返信ありがとうございます。
以下のXMLソースを使用しています。 XMLソース↓ <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="xxx100030.xsl"?> <root> <head> <procid>id</procid> <status>status</status> <rowcnt>rowcnt</rowcnt> <command>command</command> <condition> <Name>testtest</Name> </condition> <javascript/> </head> <data> <Company> <record> <id>1</id> <name>test</name> <addreviation>testtest</addreviation> <type>testtesttest</type> <updated>206-06-16</updated> <invalid>no</invalid> <modify>Goto()</modify> </record> <record> <id>1</id> <name>test</name> <addreviation>testtest</addreviation> <type>testtesttest</type> <updated>206-06-16</updated> <invalid>no</invalid> <modify>Goto()</modify> </record> <record> <id>1</id> <name>test</name> <addreviation>testtest</addreviation> <type>testtesttest</type> <updated>206-06-16</updated> <invalid>no</invalid> <modify>Goto()</modify> </record> </Company> </data> </root> <modify>ノードにjavascriptの関数名を記述しています。 javascriptソース↓ function Goto() { alert("aaaa"); document.f102001.target = "f_top"; document.f102001.action = 'aaaaa'; document.f102001.submit(); return false; } ○変換後HTMLソース↓ <HTML LANG="en"> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=UTF-16"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset="> <TITLE>Administration</TITLE><script type="text/javascript" src="http://127.0.0.1/SHIMIZUTEST/js/xxx100010.js"></script></HEAD> <BODY CLASS="bodyimg" TOPMARGIN="0"> <DIV CLASS="title">Company Information</DIV> <FORM NAME="f102001" METHOD="POST"> <TABLE CLASS="SelCompHnd"> <TD WIDTH="100"> <tr><INPUT TYPE="button" NAME="Add" CLASS="ButtonWhite" VALUE="Add" onClick="loadXSTLFile('xxx100020')"></tr> </TD> </TABLE> <DIV STYLE="font-family:Verdana;font-size:8px;width:470px;overflow:auto;"> <TABLE CLASS="AdminTableFont" BORDER="1" cellspacing="0" cellpadding="4" FRAME="box"> <COLGROUP WIDTH="170"></COLGROUP> <COLGROUP WIDTH="90"></COLGROUP> <COLGROUP WIDTH="80"></COLGROUP> <COLGROUP WIDTH="70"></COLGROUP> <td> <TR> <TH CLASS="TblHead_admin">Name</TH> <TH CLASS="TblHead_admin">Abbreviation</TH> <TH CLASS="TblHead_admin">Type</TH> <TH CLASS="TblHead_admin">Modify</TH> </TR> </td> </TABLE> </DIV> <DIV STYLE="font-family:Verdana;font-size:8px;width:470px;height:352px;overflow:auto;"> <TABLE CLASS="AdminTableFont" BORDER="1" cellspacing="0" cellpadding="4" FRAME="box"> <COLGROUP WIDTH="170"></COLGROUP> <COLGROUP WIDTH="90"></COLGROUP> <COLGROUP WIDTH="80"></COLGROUP> <COLGROUP WIDTH="70"></COLGROUP> <tr> <td>test</td> <td>testtest</td> <td>testtesttest</td> <td><input type="button" CLASS="ButtonWhite" name="Modify" value="Modify" onClick="Goto()"></td> </tr> </TABLE> </DIV> </FORM> </BODY> </HTML> 関数Goto()を実行しようとすると「オブジェクトを指定してください。」 と表示されてしまいます。 以上よろしくお願いいたします。 [ メッセージ編集済み 編集者: ザック 編集日時 2006-06-19 15:53 ] [ メッセージ編集済み 編集者: ザック 編集日時 2006-06-19 15:55 ] [ メッセージ編集済み 編集者: ザック 編集日時 2006-06-19 15:57 ] | ||||
|
投稿日時: 2006-06-19 16:33
IE6 で src="http://127.0.0.1/
ということは、ローカルネットでWebサーバ Apache 2.0.40 ですね | ||||
|
投稿日時: 2006-06-19 17:20
そうです。 相対パス(../js/xxx100010.js)でやってみたんですがだめだったので・・・。 XSLTにあうようXMLを作成してローカルでXMLをダブルクリックすると うまくいったのですが(相対パス、Http:://パスとも) サーバ側から変換してだすと「オブジェクトが見つかりません」 エラーになってしまいます。 以上よろしくお願いいたします。 | ||||
|
投稿日時: 2006-06-19 17:38
IE6 のアドレス欄に
http: //127.0.0.1/SHIMIZUTEST/js/xxx100010.js で見えますか | ||||
|
投稿日時: 2006-06-19 19:07
見えます。 以上よろしくお願いいたします。 | ||||
|
投稿日時: 2006-06-20 18:46
charset encoding の一致はどうでしょう。
|