- - PR -
AjaxでXMLデータの受け渡し
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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】 | ||||
|
投稿日時: 2006-05-08 15:16
どういったエラーか詳細を知りたいとこですが、とりあえず上記がキチッと XML 文書になっているか確認ですね。 _________________ 囚人のジレンマな日々 | ||||
|
投稿日時: 2006-05-08 15:18
このままでは BODY に XML が書かれた HTML がクライアントに戻されてしまいます。 データをXMLとして返したいなら、ここでただResponse.Writeするのではなく ContentType を "text/xml" にしてあげる必要があります データを出力し終わったら Response.End() で閉じる必要もありますね | ||||
|
投稿日時: 2006-05-08 15:24
Response.ContentType を設定し忘れているだけとか。 | ||||
|
投稿日時: 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 ] | ||||
|
投稿日時: 2006-05-08 17:04
Response.Write(xml);
↓ Response.ContentType = "text/xml"; Response.Write(xml); Response.End(); 元の行を3行に変更したのですがまだエラーが出てしまいます。 受取側のJavaScriptが拒否してるのだろうか・・・ 以上中間報告です^^; | ||||
|
投稿日時: 2006-05-08 17:17
JavaScript 側でどういうメッセージのエラーが表示されるのでしょうか また、最終的にどうするかは別として とりあえず ResponseText でどういう XML を受け取っているか試してみませんか? | ||||
|
投稿日時: 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 ] |