• ベストアンサー

Ajax:getElementsByTagNameで取得できない

Ajaxでプログラミングをしております。 サーバに問い合わせた答えをXMLで返しております。 Ajaxで問い合わせて、 alert(req.responseText); とすれば、XMLが画面に表示されて、答えが返っていることを確認できています。 ====XMLデータは以下=== <?xml version="1.0" encoding="utf-8" ?> - <results> - <result> <x>139.1748046875</x> <y>37.26530995561875</y> <kiji>トラックバックテスト</kiji> <url>http://blog.livedoor.jp/***/archives/50669333.html</url> <contents>test trackbackAAAAAAAAAAAAAAAAAAAA</contents> <btitle>必勝!株式投資!</btitle> <date>10.24.06</date> </result> - <result> <x>139.1748046875</x> <y>37.26530995561875</y> <kiji>下げシグナル</kiji> <url>http://blog.livedoor.jp/***/archives/50533401.html</url> <contents>カブログへの清き一票よろしくお願いします </contents> <btitle>必勝!株式投資!</btitle> <date>2006.10.24</date> </result> </results> ====ここまで===== XMLの<result>タグでブロックごとに分解し、その分解されたブロックから <X>の値、<contents>の値を取ろうとしております。 ためしに、 var result = req.responseXML.getElementsByTagName('result'); alert(result.length); とやって、<result>タグで2ブロックにきれているか、確かめたのですが、 0と返ってきます。 何かやり方がわるいのでしょうか? サーバプログラム、クライアントプログラムとも、UTF-8でやってます。 IEは6.0です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

以下のソースで試してください。 保存する時は必ず文字コードをutf-8で指定して保存するように。 xmlは書式に厳格です。余分なスペースなんかも気にしてください。 良くわからない場合は、ブラウザーで開くとパースできます。 ブラウザーで開ければだいたい大丈夫なんじゃないでしょうか・・ <?xml version="1.0" encoding="utf-8"?> <results> <result> <x>139.1748046875</x> <y>37.26530995561875</y> <kiji>トラックバックテスト</kiji> <url>?http://blog.livedoor.jp/***/archives/50669333.html</url> <contents>test trackbackAAAAAAAAAAAAAAAAAAAA</contents> <btitle>必勝!株式投資!</btitle> <date>10.24.06</date> </result> <result> <x>139.1748046875</x> <y>37.26530995561875</y> <kiji>下げシグナル</kiji> <url>http://blog.livedoor.jp/***/archives/50533401.html</url> <contents>カブログへの清き一票よろしくお願いします</contents> <btitle>必勝!株式投資!</btitle> <date>2006.10.24</date> </result> </results>

kbr
質問者

お礼

ありがとうございます。IEで受信したXMLは開けなかったので、文字コードに問題がありそうです。 でもJSONでやったら、さっくり出来てしまったので、JSONで作っております。 ご回答ありがとうございました。 ちなみに出来たサイトはこちらです。 ■世界中の釣りブログのトラックバックを地図に貼り付け! World Fishing Reports http://wfr.from.tv/ です。

その他の回答 (2)

  • NTJ
  • ベストアンサー率44% (46/103)
回答No.2

リクエストの解答は来ているようなので、いっそXMLパーサーに頼らないで自力で解析しちゃったらいかがです?(笑 var X=req.responseText.match(/<x>[^<]+<\/x>/g); var R=req.responseText.match(/<contents>[^<]+<\/contents>/g); たったこれだけで、配列の X と R へ必要な値が取れちゃうと思うのですが。 ついでに、リクエストの側もXMLHttpReqestだけに絞り込んでしまえば、多分30行程度で必要な関数は完成してしまうのではないかと。

kbr
質問者

お礼

PEARで楽したかったので・・・ でも、これだけでできちゃうんですよね・・・ ありがとうございました。

回答No.1

alert(req.responseXML); には何が入ってますか? > - <results> XMLのソースに - が入っているのでしょうか? もしそうならXMLとしての文法を確認してみてはいかがでしょうか。

kbr
質問者

お礼

-は入っておりません。 ただ、IEで開くと、XMLが解析できないと出てしまいます・・・ 文字コードを変えたら上手く表示されたり・・・ PEARを使って、DBの情報をそのままXMLに置き換えてるんですけどね・・

関連するQ&A