Javascript 未捕获类型错误:无法读取属性';子节点';未定义的不在Chrome和Mozilla中工作
我是XML/HTML节点的新手,正在编写代码,这在IE中很好用,但在其他浏览器中却不行。 下面是一段令人担忧的代码:Javascript 未捕获类型错误:无法读取属性';子节点';未定义的不在Chrome和Mozilla中工作,javascript,html,xml,google-chrome,dom,Javascript,Html,Xml,Google Chrome,Dom,我是XML/HTML节点的新手,正在编写代码,这在IE中很好用,但在其他浏览器中却不行。 下面是一段令人担忧的代码: if (window.XMLHttpRequest) { xmlhttp = new XMLHttpRequest(); } else { xmlhttp =new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.open("GET","SMoutput.xml",false); xmlhttp.send();
if (window.XMLHttpRequest)
{
xmlhttp = new XMLHttpRequest();
}
else
{
xmlhttp =new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","SMoutput.xml",false);
xmlhttp.send();
xmlDoc = xmlhttp.responseXML;
//xmlDoc.async="false";
//xmlDoc.load("./SMoutput.xml");
var Server=xmlDoc.documentElement;
var fts = Server.childNodes[1];
var rows = Server.childNodes.length;
var cols = fts.childNodes.length;
var body = document.getElementsByTagName("body")[0];
//var tabl = document.createElement("table");
var tabl = document.getElementById("ftsinfo");
var tblBody = document.createElement("tbody");
for (var i = 0; i < rows; i++)
{
var row = document.createElement("tr");
var length=0;
fts = Server.childNodes[i];
for (var j = 0; j < cols; j++)
{
var cell = document.createElement("td");
***var define=fts.childNodes[j].childNodes[0].nodeValue;
var cellText = document.createTextNode(define);***
cell.appendChild(cellText);
row.appendChild(cell);
length= length+cell.innerText.length;
//cell.innerText= length
if ( length > max)
{
max=length;
}
if(cell.innerText=="Up")
{
cell.innerText=""
//cell.innerText= max
cell.style.backgroundImage="url('up.png')";
}
if(cell.innerText=="Down")
{
cell.innerText=""
//cell.innerText= max
cell.style.backgroundImage="url('down.png')";
}
row.style.fontSize= "14";
row.style.color= "black";
}
tblBody.appendChild(row);
tabl.appendChild(tblBody);
tabl.setAttribute("border", "1");
当我打开链接时,chrome不会加载数据,并说“`
未捕获的TypeError:无法读取未定义“”的属性“childNodes”
,当它通过第一行变量define=fts.childNodes[j].childNodes[0].nodeValue时 我只想从childnodes获取文本值,并将其传递到要显示的celltext变量中 这是工作在IE,但不是在其他浏览器,我也是新的这些。发现很难破解。请帮忙 以下是SMoutput.xml的示例:
<network>
<server>
<name>PROD JBOSS Service</name>
<host>Hostname1</host>
<port>Portnumber1</port>
<result>Up</result>
</server>
<server>
<name>PROD Database</name>
<host>Hostname2</host>
<port>Portnumber2</port>
<result>Down</result>
</server>
PROD JBOSS服务
主机名1
端口号1
向上的
产品数据库
主机名2
端口号2
向下
我建议不要使用
childNodes
集合,因为这取决于元素节点之间的空白文本节点,以及DOM实现是否将它们包含到树中。不同的实现可以得到不同的结果。相反,一旦您拥有xmlDoc=xmlhttp.responseXML
,您可以使用getElementsByTagName
var serverElements = xmlDoc.getElementsByTagName("server");
for (var i = 0, l = serverElements.length; i < l; i++) {
var server = serverElements[i];
var nameEl = server.getElementsByTagName("name")[0];
var hostEl = server.getElementsByTagName("host")[0];
var portEl = server.getElementsByTagName("port")[0];
var resultEl = server.getElementsByTagName("result")[0];
// now here you can extract the data, for older versions of IE you need to access the `.text` property, for other browsers and recent version the `.textContent` property e.g.
var name = nameEl.textContent ? nameEl.textContent : nameEl.text;
var host = hostEl.textContent ? hostEl.textContent : hostEl.text;
// here you can add the `name`, `host` etc. to your HTML table
}
var serverElements=xmlDoc.getElementsByTagName(“服务器”);
for(var i=0,l=serverElements.length;i
请发布导致该错误的XML的最小示例。var define=fts.childNodes[j]。childNodes[0]。nodeValue;var cellText=document.createTextNode(定义);是导致问题的代码段..我收到此错误:Uncaught TypeError:无法读取undefined“的属性'childNodes',我们需要查看导致该错误的SMoutput.xml
的最小示例。抱歉,我误解了…下面是SMoutput.xml的示例:
<network>
<server>
<name>PROD JBOSS Service</name>
<host>Hostname1</host>
<port>Portnumber1</port>
<result>Up</result>
</server>
<server>
<name>PROD Database</name>
<host>Hostname2</host>
<port>Portnumber2</port>
<result>Down</result>
</server>
var serverElements = xmlDoc.getElementsByTagName("server");
for (var i = 0, l = serverElements.length; i < l; i++) {
var server = serverElements[i];
var nameEl = server.getElementsByTagName("name")[0];
var hostEl = server.getElementsByTagName("host")[0];
var portEl = server.getElementsByTagName("port")[0];
var resultEl = server.getElementsByTagName("result")[0];
// now here you can extract the data, for older versions of IE you need to access the `.text` property, for other browsers and recent version the `.textContent` property e.g.
var name = nameEl.textContent ? nameEl.textContent : nameEl.text;
var host = hostEl.textContent ? hostEl.textContent : hostEl.text;
// here you can add the `name`, `host` etc. to your HTML table
}