• ベストアンサー

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

  • Ajax:FireFoxだと動作しない

    既出でしたらすみません。 IEだとうまく動作するものが、FireFoxだと動作しません。 原因をご存知の方がいらっしゃいましたら、 ご教示願えますでしょうか。 参考書籍などをお伝えいただくだけでも構いません。 私はプログラミングの知識はありますが、 DOMについては初心者です。 よろしくお願いします。 ----------HTML/JSソース <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Ajaxサンプル</title> <script type="text/JavaScript" src="../lib/prototype.js"></script> <script type="text/javascript"> <!-- function getFile(){ new Ajax.Request('test_xml03.xml', {method: 'get', onSuccess: getResponse, onFailure: getError }); function getResponse(req){ var varResult = req.responseXml.getElementsByTagName('result'); var varItem = varResult[0].getElementsByTagName('country'); $('result').innerHTML = varItem[0].firstChild.nodeValue; } function getError(req){ $('result').innerHTML = "ERROR"; } } //--> </script> </head> <body> <div> <input type="button" value="データの読み込み" onClick="getFile()"/> </div> <div id="result" >ここにデータを読み込みます。</div> </body> </html> ----------XMLデータ(test_xml03.xml) <?xml version="1.0" encoding="UTF-8" ?> <result> <country>アメリカ</country> <kanji>米</kanji> </result> ----------状況 「データの読み込み」ボタンをクリックすると、 IEでは"result"部分に 「アメリカ」と出ますが、 FireFoxだと何も起こりません。 ----------環境 WindowsXP IE6.0 FireFox2.0 prototype.jsを使用 ----------補足 使用しているJavaScriptは、自分で調べた限りでは IE/FF共に使用できるコードばかりのはずです。 いろいろと試してみましたが、わかりません。 どうかよろしくお願い申し上げます。

  • ajax通信の戻り値が空になる。

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> <script src="jquery.xdomainajax.js"></script> <!-- 追加 --> <script type="text/javascript"> $.ajax( { url: URL, type: 'GET', cache: false, dataType: 'xml' } ) .done(function(res) { console.log(res); } ) .fail(function(res) { console.log('FAIL') } ); </script> </head> 上記のコードの通り(url部分は明記を省略)、jquery.xdomainajax.jsを用いたajax通信を行いたいのですが、通信は成功しているもののコンソールを見ると以下のようになっています。 Object { query: Object, results: Array[0] } 本来ならresultsの部分に返り値が格納されるのですが、空になってしまいます。 なにか原因があればご教授頂きたいです。よろしくお願い致します。

  • Ajax データが取得できない

    現在、AJAXを勉強中です。以下のhtmlを実行し、pref.jsを呼び出すコードをサイトから引用して記述しました。 しかし、「データを取得する」ボタンを押すと、【処理中です・・・】というメッセージが出るだけで、いっこうに該当データを取得できません。(本来であれば、指定されたxmlファイル内のデータが表示されるはずなのですが・・) 何が原因なのでしょうか。 解決策がわかる方がいらっしゃいましたらご教授ください。 よろしくお願いします。 ■pref.html --------------------------------- <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" src="../lib/prototype.js"></script> <script type="text/javascript" src="pref.js"></script> <link href="pref.css" rel="stylesheet" type="text/css"> <title>pref</title> </head> <body> <div> <input type="button" id="btnData" value="データ取得" /> <input type="button" id="btnClear" value="クリア" /> </div> <div id="state"></div> <div id="result"></div> </body> </html> --------- ■pref.js ---- onload = init; var state; var result; function init() { $("btnData").onclick = prefDisp; $("btnClear").onclick = clearDisp; state = $('state'); result = $('result'); } function prefDisp() { state.innerHTML = "処理中です・・・<br />\n"; var url = "http://ws.bzen.net/pgtop/pref.xml"; var paramList = ""; new Ajax.Request(url, { method: 'get', onSuccess: getData, onFailure: showErrMsg, parameters: paramList }); function getData(data){ var response = data.responseXML.getElementsByTagName('Response'); var item = response[0].getElementsByTagName('Item'); var tmpHtml=""; for(i = 0; i < item.length; i++){ var prefCd = item[i].getElementsByTagName('PREF_CD'); var prefCdValue = prefCd[0].firstChild.nodeValue; var prefName = item[i].getElementsByTagName('PREF_NAME'); var prefNameValue = prefName[0].firstChild.nodeValue; tmpHtml += prefCdValue + " " + prefNameValue + "<br />\n"; } result.innerHTML = tmpHtml; state.innerHTML = "データを取得しました。<br />\n"; } function showErrMsg(){ clearDisp(); state.innerHTML = "データを取得できませんでした。<br />\n"; } } function clearDisp() { state.innerHTML = ""; result.innerHTML = ""; } ---

    • ベストアンサー
    • AJAX
  • WebWork(struts2)でのパラメータの取得について

    こんにちは。 環境:Webwork & Velocity(xwork2) & Tomcat5.5 & JDK 1.6 Action部がだいぶすっきりしましたが、requestのパラメータの取得が分かりません。 一般的なActionSupportを継承しているのですが、thisからHTTPRequestらしきGetterもありませんし・・。 やろうとしている事は'XXX.action?id=YYY'のように、URLからパラメータをgetしたいのですが。 ■JavaScript var url = "XXX.action?id=test"; ※Ajaxでリクエストしてますが省略します。 ■XML <action name="XXX" class="aaa.XXXAction">  <result name="menu" type="plainText">   /WEB-INF/classes/aaa/menu.html  </result>  <result name="test" type="plainText">   /WEB-INF/classes/aaa/test.html  </result> </action> ■Action public class XXXAction extends ActionSupport {  public String execute() throws Exception {   return SUCCESS; //←ここでURLにくっついたパラメータを返したい お分かりになりましたら、よろしくお願いします。

    • ベストアンサー
    • Java
  • HTMLページにPHPで処理した結果を表示したい

    以下の【HTML】内にPHPの結果を表示したいと思い、試行錯誤していますが、うまくできません。 ※http://xxx.com/ISL/ISLPage.php?query1=apple をブラウザで実行すると正常に表示されます。 たぶん、header("Content-type: application/x-javascript"); を 【ISLPage.php】か【ISLModule.php】のどこかに書きこんで 【ISLModule.php】の$html []= あたりに、echo "document.write・・・ に直せば できそうな気がするのですが、具体的にどうすれば、表示されるかが分かりません。(>_<;) 既に数十回トライしましたが、どうしてもダメでしたので、どうかご教示いただければと思います。 申し訳ございませんが、どうかよろしくお願い致します。 【HTML】 <html> <body> </body> <script type="http://xxx.com/ISL/ISLPage.php?query1=apple"></script> </html> 【ISLPage.php】 <html> <body> <?php include_once("./ISLModule.php"); echo $_GET['query1']; new ISLModule(array( "query" => $_GET['query1'], "hits" => 3 )); ?> </body> </html> 【ISLModule.php】 <?php class ISLModule { function __construct($param = array()) { $results = array(); if ($param['query'] != "") { $query4url = rawurlencode($param['query']); try { $url = "http://xxxxx/ … buildQuery($param); $xml = simplexml_load_file($url); if ($xml["totalResultsReturned"] != 0) { $results = $xml->Result->Hit; } } catch(Exception $e) { } } $result['query'] = $param['query']; $result["results"] = $results; ISLModule::display($result); } function display($param = array()) { $html = array(); $html []= "<div class=\"YSAPISDK\">"; $html []= "<div class=\"ISLModule\">"; $html []= "<h1>「" . h($param['query']) . "」の検索結果</h1>"; foreach ($param["results"] as $result) { $html []= "<div class=\"Item\">"; $html []= "<p><a href=\"" . h($result->Url) . "\"><img src=\"" . h($result->Image->Small) . "\" /></a></p>"; $html []= "<h2><a href=\"". h($result->Url) . "\">" . h($result->Name) . "</a></h2>"; if (!is_null($result->PriceLabel->SalePrice)) { $html []= "<p class=\"Price\">". h($result->Price). "円</p>"; } $html []= "</div>"; } $html []= "</div>"; $html []= "</div>"; echo join("\n", $html); } } ?>

    • 締切済み
    • PHP
  • postしたコンテンツの取得

    いつもお世話になっております。 PHPでHTTPでPOSTされたコンテンツを受け取るサンプルとして以下のような スクリプトを作成しました。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <p><?php var_dump(file_get_contents('php://input')); ?></p> </body> </html> そしてデータの送信側のPHPスクリプトとして以下のようなものを作成しました。 <?php function post_request($url, $data, $referer='') { // Convert the data array into URL Parameters like a=b&foo=bar etc. $data = http_build_query($data); // parse the given URL $url = parse_url($url); if ($url['scheme'] != 'http') { die('Error: Only HTTP request are supported !'); } // extract host and path: $host = $url['host']; $path = $url['path']; $port = $url['port']; var_dump($url); $fp = fsockopen($host, $port, $errno, $errstr, 30); if ($fp){ // send the request headers: fputs($fp, "POST $path HTTP/1.1\r\n"); fputs($fp, "Host: $host\r\n"); if ($referer != '') fputs($fp, "Referer: $referer\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: ". strlen($data) ."\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $data); $result = ''; while(!feof($fp)) { // receive the results of the request $result .= fgets($fp, 128); } } else { return array( 'status' => 'err', 'error' => "$errstr ($errno)" ); } // close the socket connection: fclose($fp); // split the result header from the content $result = explode("\r\n\r\n", $result, 2); $header = isset($result[0]) ? $result[0] : ''; $content = isset($result[1]) ? $result[1] : ''; // return as structured array: return array( 'status' => 'ok', 'header' => $header, 'content' => $content ); } $fileHandle = fopen("/home/a/text.txt", "rb"); $fileContents = stream_get_contents($fileHandle); fclose($fileHandle); var_dump(post_request('http://ipaddress/rawpost.php',$fileContents)); ?> 上記PHPスクリプトによってPOSTされた結果のHTMLの var_dump(file_get_contents('php://input')) の部分はstring(0)となりました。 HTTPのPOSTのコンテンツ部分を取得するには どのようなスクリプトを記載すればよいのでしょうか。 どなたかご教授よろしくお願いいたします。

    • 締切済み
    • PHP
  • ajaxを使ったページがSEOで不利にならない方法

    検索エンジンは、ajaxが使われたコンテンツを動的に取得できないためSEOで不利になってしまいます。その対策についてアドバイスをいただきたいです。 http://support.google.com/webmasters/bin/answer.py?hl=ja&answer=174992 では、ajaxが使われたページ限定でそのURLに#!を入れるか、<head>内に<meta name="fragment" content="!">を入れるだけで解決します、と書いてあります。 mein.htmlがあって、メインのコンテンツはcontents.phpにまとまっています。 contents.phpを検索エンジンによくみてもらいたいです。 urlに#!という文字を入れたくないので、後者の方を使おうと思っていますが、 mein.htmlの<head>に<meta name="fragment" content="!">を入れて、 contents.phpには入れない。↓のような感じでいいということですか? <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta name="fragment" content="!" />←「 /をつける」 <title></title> </head> <body> <p onclick="send()">コンテンツの取得</p> <div id="ajaxcontents"></div> <script type="text/javascript"> function send(){ xmlhttpreq = ~~~; xmlhttpreq.onreadystatechange = function (){ if (change.readyState == 4 && change.status == 200) { var con = xmlhttpreq.responseText; document.getElementById("ajaxcontents").innerHTML = con; } }; xmlhttpreq.open("GET", "contents.php?get=", true); xmlhttpreq.send(null); } </script> </body> </html>

    • ベストアンサー
    • AJAX
  • simplexml_load_fileについて

    お世話になります。 simplexml_load_fileについて質問です。 下記のようなコードでライブドアブログのRSSを解析しようとしております。 ブログ記事の全文を取得したいのですが、一部分しか取得することが出来ません アドバイスをお願いします。 宜しくお願いします ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// $rss = $data['blog_rss']; $xml = @simplexml_load_file($rss,'SimpleXMLElement', LIBXML_NOCDATA); #ブログタイトル $data['xml']['title'] = $xml->channel->title; #ブログ説明 $data['xml']['description'] = $xml->channel->description; #最大件数 $max_lines = 8; $i=0; foreach ($xml->item as $item) { $ns = $item->getNamespaces(true); $date = $item->children($ns["dc"]); //記事のリンク先 $data['xml']['kiji'][$i]['link'] = $item->link; //記事の見出し $data['xml']['kiji'][$i]['title'] = $item->title; //記事の日付 $pubDate = $date->date; $data['xml']['kiji'][$i]['pubDate'] = date("Y年m月d日 H:i:s", strtotime($pubDate)); //記事本文 $desc = $item->description; $data['xml']['kiji'][$i]['desc'] = $desc; $i++; //最大件数に達したときストップ if ($i == $max_lines) break; }

    • 締切済み
    • PHP
  • phpからxmlへの文字化け

    PHPについての質問です。PHPのバージョンは5です。 FLASH8で作ったスクリプトからPHPに変数を送り、その変数をPHPからXMLに送っています。 しかしPHPからXMLに送ると日本語がちゃんと表示されません。何かPHPの方でしないとまずいのですか? <FLASH> System.useCodepage = true; SendData = new LoadVars(); //送りたいデータを箱に詰める this.btn_mc.onRelease = function() { _root.SendData.pro1 = nam; _root.SendData.pro2 = sbj; _root.SendData.pro3 = mail; _root.SendData.pro4 = product; //データ(中身)を詰めた箱をgetFlash.phpに送信 _root.SendData.sendAndLoad("http://localhost/php/xml_php/xml12.php", _root.SendData); }; <PHP> <?php /*変数を入れる*/ $name = $_POST["pro1"]; $sbj = $_POST["pro2"]; $add = $_POST["pro3"]; $msg = $_POST["pro4"]; /*時間を取得する*/ $stamp = time(); $date = date('Y,m/d(D)', $stamp); /*xmlに追加*/ $xml_path = "test1.xml"; $xml = file_get_contents( $xml_path ); $replace_key = "<article>"; $add_xml = $replace_key."\n<entry name='$name' dat='$date' tit='$sbj' contents='$msg'/>\n"; $result = str_replace($replace_key,$add_xml,$xml); file_put_contents( $xml_path , $result ); ?> <xml> <?xml version="1.0" encoding="utf-8"?> <article> <entry name="ha" dat="2008,03/10(Mon)" tit="test" contents="hogehoge"/> </article> となっています。

    • 締切済み
    • PHP
  • jqueryでRSS内のdc:dateなどの要素の取得方法

    jqueryを使用してRSSのdc:dateやdc:subjectなどの要素を取得するにはどうしたらよいでしょうか。 現在以下のようなコードにしていまして、なんとなく取得したRSSの最初に書いてあるxmlns:dc="http://purl.org/dc/elements/1.1/" となってる部分を利用すればいいのかなと思い立ち、children関数などを使ってみましたが取得できませんでした。 $.ajax({ url: settings.xmllocation, async: true, cache: false, dataType: "xml", success: function(xml) { $(xml).find('item').each(function() { var title = $(this).find('title').text(); var url = $(this).find('link').text(); var date = $(this).children('http://purl.org/dc/elements/1.1/').find('dc:date').text(); var element = $('<div><a href="' + url + '">' + title + '('+date+')</a></div>'); $(container).append(element); elements.push(element); }); });