为什么这段 JavaScript 代码会报错 "undefined"?

3

我也尝试使用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>

我看到的错误信息:
未捕获的TypeError错误:无法读取未定义属性的nodeValue。
2个回答

2

parseFromString 不会从 address.xml 文件中加载数据。正如其名称所示,它只会解析来自字符串的 XML 文档,例如:

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

您需要单独使用XHR(Ajax)请求来从该文件中加载数据。

此外,您应该使用console.log而不是alert来调试。这样您就可以真正看到对象中的内容(在您的情况下是错误消息)。


1
但是如何从文件中读取? - Harshal Carpenter
那是一个全新的问题 :) 你应该在谷歌上搜索“ajax”,你会找到很多关于它的信息。我猜你是个初学者,所以最简单的解决方案就是使用jQuery:http://api.jquery.com/jquery.ajax/ - Felipe Brahm
是的,我是一个初学者,如何开始使用JQuery呢?.. JavaScript和JQuery是相互关联的吗? - Harshal Carpenter
jQuery是最流行的JavaScript框架,可帮助您开发Web应用程序。它具有许多功能,可帮助您操作DOM,进行XHR / ajax请求等。网络上有很多教程。 - Felipe Brahm

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;
}

1
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Harshal Carpenter
我猜浏览器是被编程成监视跨站攻击的,并且会阻止试图从您的Web浏览器读取硬盘的请求。您可以在Firefox中进行测试。然而,如果您将HTML部署到主机上,它将与任何浏览器正常工作。有关更多详细信息,请查看以下链接:https://dev59.com/LWIj5IYBdhLWcg3wpWlx - Kartic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接