サンプルソース

作ってみました。

サーバーサイドは、StrutsでActionが実行されると、規定のXMLを書き出す.

JSP側は出力させるだけ。

<div id="ajax" align="center"></div>

サーバーから帰ってくるXMLはこんな感じ

<?xml version="1.0" encoding="EUC-JP"?>
  <root>
    <item>
      <name>ぜにがた</name>
      <no>1</no>
    </item>
  </root>


で。問題のJavaScript

function load(action) {
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      xmlhttp = false;
    }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  if (xmlhttp) {
    xmlhttp.onreadystatechange = function() {
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
      
      // ↓ここからXMLの要素の取り出し
        
        // 受信したXMLの内容をテキスト表示,
        ajax1.innerHTML = xmlhttp.responseText;
        
        // JavaScript DOM 関数で扱える XMLDocument オブジェクトにする.
        var xmldoc = xmlhttp.responseXML;
        
        // 上手くいかない・・・!なぜだ!
        ajax2.innerHTML = xmlhttp.responseXML.documentElement.tagName;
        
        handlerFunc(xmldoc);
      }
    }
    xmlhttp.open('GET', action);
    xmlhttp.send(null);
  }
}

function handlerFunc(xmldoc) {
    var root = xmldoc.documentElement;
    if (root != null) {
      var items = root.childNodes;
      
    } else {
      // ルートエレメントが存在しない, 必ずここを通る・・・
      ajax.innerHTML = "root element is none ";
    }
}

ということ。
responseXML.documentElementで取り出した値が必ずNULLになってしまうのが問題。

うーむ、なぞい。

DOMとはなんぞや!

              • -