締切済み

jQueryを使用してxmlを取得 ieでエラー

  • 困ってます
  • 質問No.6761595
  • 閲覧数2458
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お礼率 45% (16/35)

wordpressで固定ページからxmlを出力するテンプレートを選択してます。
ページにアクセスした時に吐き出されるxmlは
<?xml version='1.0' encoding='UTF-8' ?>
<common>
<days>01</days>
<days>02</days>
<days>03</days>
<days>04</days>
<days>05</days>
<days>06</days>
</common>
です。

別のhtmlファイルの方でjQueryで
<script>
$(document).ready(function () {
$.ajax({
type: "GET",
url: "xmlをはきだすアドレス",
dataType: "feed",
success: xmlParser,
error: function(){
alert('Error loading XML document');
}
});
});

function xmlParser(xml) {
alert($(xml).children("days").length);
}
</script>
と書いています。

この場合firefoxやsafari,chromeではalertで6と表示されますが
ie6,7,8だと0となってしまいます。

どなたかieでもalertで6と表示させる方法を知っている方いませんか?

回答 (全1件)

  • 回答No.1

ベストアンサー率 51% (166/325)

なれないうちは使う関数の API Reference を毎回確認することを勧めるよ!

まず、$.ajax() ね。
http://api.jquery.com/jQuery.ajax/

dataType: に "feed" を指定しているけど、API Reference には次の 6つしかのっていないから、この中のどれかを指定しよう。

"xml"
"html"
"script"
"json"
"jsonp"
"text"

dataType: は取得するファイルがどんな種類のファイルかを指定するための項目だから、
url: が "xmlをはきだすアドレス" なら "xml" がよさそうだね。

次に、下の行の中の $(xml) ね。
> alert($(xml).children("days").length);

API Reference には下のように書かれているよ。

http://api.jquery.com/jQuery/#jQuery2
| jQuery( html, [ ownerDocument ] )
| html A string of HTML to create on the fly. Note that this parses HTML, not XML.
| ownerDocumentA document in which the new elements will be created

"Note that this parses HTML, not XML."
「これは HTML を構文解析するけれど、XML はしないよ、気をつけてね。」

つまり、XML 形式のテキスト文字列 xml を $(xml) しても、期待の通りの結果になるとは限らないということだよ。


とりあえず、"xmlをはきだすアドレス" と同じサーバに、下の [別のhtmlファイル.html] を作成して、ブラウザで表示してみて!
もちろん "xmlをはきだすアドレス" 部分は書き換えてね。

[別のhtmlファイル.html]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>jQuery.ajax() で xml ファイルを読み込んでみるテスト</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
</script>
<script type="text/javascript">
$(function () {
$.ajax({
type: "GET",
url: "xmlをはきだすアドレス",
dataType: "xml",
success: function (data) {
alert(data.getElementsByTagName('days').length);
},
error: function (){
alert('Error loading XML document');
}
});
});
</script>
</head>
<body>
<h1>jQuery.ajax() で xml ファイルを読み込んでみるテスト</h1>
</body>
</html>

コードの中の getElementsByTagName().length については、下のページを確認してね。
http://www.w3.org/TR/DOM-Level-2-Core/ecma-script-binding.html

jQuery は便利だけど、その前に DOM(Document Object Model) を知っておくと、jQuery でうまくいかなくても、自分で解決できるようになるよ。
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

ピックアップ

ページ先頭へ