- PR -

AjaxでXMLデータの受け渡し

投稿者投稿内容
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-05-08 14:56
お世話になっております。

○○.xmlファイルをresponseXMLで受信する事は可能なのですが、ファイルに入れてないXML文字列を受け取ろうとするとエラーが起きてしまいます。

●C#
using System.Data.SqlClient;
using System.Xml;

// 変数
SqlConnection con = new SqlConnection();
SqlCommand cmd;
SqlDataReader dr;
DataSet ds = new DataSet();

// データセット作成
con.ConnectionString = "接続文字列";
cmd = con.CreateCommand();
if(con.State == ConnectionState.Closed) con.Open();
cmd.CommandText = "select 名前 from 人 where コード = 1";
ds.Reset();
SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, con);
da.Fill(ds, "人");

// XML化
string strXML = "<?xml version='1.0' ?>\r\n" + ds.GetXml();
XmlDocument xml = new XmlDocument();
xml.LoadXml(strXML);
con.Close();

Response.Write(xml);

●JavaScript
function search(){
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xmlHttp = new XMLHttpRequest();
}

xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {

var xml = xmlHttp.responseXML;
var nodes = xml.getElementsByTagName("名前");
document.forms[0].Text1.value = nodes[0].firstChild.nodeValue; // ここでエラーが起きます。
}
}
}

サーバー側で書いてるResponse.Write(xml);の時点でHTMLに書き込む訳ですからここでXMLとしての情報を失っているのかと睨んでます。
出来ないならResponseTextで受け取る予定です。
馬鹿な質問かもしれませんが、返信してくださると嬉しいです。

環境【VisualStudio.NET2003】【MSSQL2000】
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-05-08 15:16
引用:

string strXML = "<?xml version='1.0' ?>\\r\\n" + ds.GetXml();


どういったエラーか詳細を知りたいとこですが、とりあえず上記がキチッと XML 文書になっているか確認ですね。
_________________
囚人のジレンマな日々
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-08 15:18
引用:

パンダおにぎりさんの書き込み (2006-05-08 14:56) より:

// XML化
string strXML = "<?xml version='1.0' ?>rn" + ds.GetXml();
XmlDocument xml = new XmlDocument();
xml.LoadXml(strXML);
con.Close();

Response.Write(xml);


このままでは BODY に XML が書かれた HTML がクライアントに戻されてしまいます。
データをXMLとして返したいなら、ここでただResponse.Writeするのではなく
ContentType を "text/xml" にしてあげる必要があります

データを出力し終わったら Response.End() で閉じる必要もありますね
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2006-05-08 15:24
引用:

// XML化
string strXML = "<?xml version='1.0' ?>rn" + ds.GetXml();
XmlDocument xml = new XmlDocument();
xml.LoadXml(strXML);
con.Close();

Response.Write(xml);



Response.ContentType を設定し忘れているだけとか。
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-05-08 15:37
返信ありがとうございます。

>>囚人さん
encoding='UTF-8'が抜けていたので追加しました。
でも相変わらずウインドウの左下には黄色いマークのエラーが・・・

ブレークポイントでstrXMLを確認した結果です。
? strXML
<?xml version='1.0' encoding='UTF-8'?>\r\n<NewDataSet>\r\n <人>\r\n <名前>鎌倉経由 </名前>\r\n </人>\r\n</NewDataSet>
うまくXML化してるかなとは思うのですがまだあまり詳しくないです^^;

>>かるあさん
なるほど、タイプを指定してあげるんですね。
以前pdf、csvに変換した時やった事あります。
早速実験致します。

>>渋木宏明さん
だんだんその雰囲気が漂ってきました・・・

[ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-05-08 15:39 ]
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-05-08 17:04
Response.Write(xml);

Response.ContentType = "text/xml";
Response.Write(xml);
Response.End();

元の行を3行に変更したのですがまだエラーが出てしまいます。
受取側のJavaScriptが拒否してるのだろうか・・・
以上中間報告です^^;
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-08 17:17
引用:

パンダおにぎりさんの書き込み (2006-05-08 17:04) より:

元の行を3行に変更したのですがまだエラーが出てしまいます。


JavaScript 側でどういうメッセージのエラーが表示されるのでしょうか

また、最終的にどうするかは別として
とりあえず ResponseText でどういう XML を受け取っているか試してみませんか?
くー
ベテラン
会議室デビュー日: 2005/02/07
投稿数: 86
投稿日時: 2006-05-08 17:25
System.Xml.XmlDocumentスレッドを中止しようとしました。
とResponseTextで表示されます。

すいません、投稿忘れてました。

調べましたらResponse.End()が仕様で出すエラーと分かりました。
Endの部分をコメント化してやってみたらResponseTextはSystem.Xml.XmlDocumentを取ってます。
ですがnodes[0].firstChild.nodeValue;の所でエラーが出てしまいます。

[ メッセージ編集済み 編集者: パンダおにぎり 編集日時 2006-05-08 17:59 ]

スキルアップ/キャリアアップ(JOB@IT)