为什么这个JavaScript代码会给我错误" undefined"?

时间:2014-11-12 04:59:16

标签: javascript

我也尝试使用Microsoft的loadXML(),但它没有用。它很可能已被弃用。这里的错误是什么。还有其他方法可以写吗?

HTML代码:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="content-type" content="text/html;charset=utf-8">
        <title>childNode Property</title>
        <script type="text/javascript" src="allfeaturetest.js"></script>
    </head>
    <body>
        <h1>childNode Property</h1>
        <hr/>
        <form name="input">
            <input type="button" value="Press me for XML" onclick="return xmlly()"/>
        </form>
        <div id="pop">
        </div>
    </body>
</html>

JavaScript代码:

function xmlly(){
    var resul ="";
    var dom = new DOMParser();
    var xmlDoc = dom.parseFromString("address.xml","application/xml");
    var myElem = xmlDoc.getElementsByTagName("address").childNodes;
    alert(myElem); //gives me undefined
    alert(xmlDoc); //gives me [Object XMLDocument]
    document.getElementById("pop").innerHTML = xmlDoc.documentElement.childNodes[0].attributes[0].nodeValue;
}

XML文件:

<address>
 <street>Roble Ave</street>
  <mtfcc>S1400</mtfcc>
  <streetNumber>649</streetNumber>
  <lat>37.45127</lat>
  <lng>-122.18032</lng>
  <distance>0.04</distance>
  <postalcode>94025</postalcode>
  <placename>Menlo Park</placename>
  <adminCode2>081</adminCode2>
  <adminName2>San Mateo</adminName2>
  <adminCode1>CA</adminCode1>
  <adminName1>California</adminName1>
  <countryCode>US</countryCode>
 </address>

向我显示错误:

Uncaught TypeError: Cannot read property 'nodeValue' of undefined

2 个答案:

答案 0 :(得分:2)

parseFromString不会加载address.xml文件中的数据。顾名思义,它只会解析字符串中的XML文档,如下所示:

var dom = new DOMParser();
var xmlDoc = dom.parseFromString("<address>test</address>","application/xml");

您需要一个单独的XHR(Ajax)请求来加载该文件中的数据。

此外,您应该使用console.log而不是alert来调试此问题。您将能够真正看到该对象中的内容(在您的情况下出现错误消息)。

答案 1 :(得分:0)

如果您的唯一目的是阅读节点,请使用以下功能 -

function xmlly()
{
var xmlDoc=loadXMLDoc("address.xml");
var elm  = xmlDoc.getElementsByTagName("street")[0]; // tag name you want to read
var node =elm.childNodes[0];
alert(node.nodeValue)
}

function loadXMLDoc(filename)
{
if (window.XMLHttpRequest)
  {
  xhttp=new XMLHttpRequest();
  }
else // code for IE5 and IE6
  {
  xhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xhttp.open("GET",filename,false);
xhttp.send();
return xhttp.responseXML;
}