我一直在编写此代码,以便从通过AJAX检索的XML文档中动态加载照片链接。我有一个全局变量xDoc存储响应XML,我在其他函数中使用它,这样我就不必每次都加载文档。请记住,我对JavaScript很新,所以细节会很棒。
我在Chrome中遇到此错误:“未捕获的TypeError:无法调用未定义的方法'getElementsByTagName',以及其他浏览器中的类似错误消息。但是,我的代码仍适用于FireFox,Chrome和Safari。然而,当谈到IE时,每个版本都无法工作。我无法理解错误的原因,以及为什么元素未定义。
错误行在下面的代码中清楚标明。这是“eProject.link = eProject.photo.getElementsByTagName(”edit“)[0] .firstChild.data;”
我的XML的数据结构如下:
<project>
<stuff>
<stuff>
<photos>
<photo>
<stuff>
<edit>
</photo>
</photos>
</project>
然后这是JavaScript:
// Initialize
function init() {
// Set the xml file
loadXMLDoc("../xml/featured.xml");
}
window.onload = init;
// Define xDoc global variable
var xDoc;
var proImages = new Array();
// Retrieve XML document as document object
function loadXMLDoc(url) {
var req = null;
try {
req = new XMLHttpRequest();
req.overrideMimeType("text/xml");
}
catch(e) {
req = null;
}
if (req) {
xDoc = null;
req.open("GET", url, true);
req.onreadystatechange = function() {
if (req.readyState == 4) {
if (req.status == 200) {
xDoc = req.responseXML;
if (xDoc && typeof xDoc.childNodes != "undefined" && xDoc.childNodes.length == 0) {
xDoc = null;
}
else {
eProject = xDoc.getElementsByTagName("project")[0];
eProject.id = eProject.getElementsByTagName("id")[0].firstChild.data;
getProject(eProject.id);
}
}
}
}
req.send(null);
}
}
function getProject(id) {
count = xDoc.childNodes.length;
i = 0;
for (i; count; i = i + 1) {
eProject = xDoc.getElementsByTagName("project")[i];
eProject.id = eProject.getElementsByTagName("id")[0].firstChild.data;
if (eProject.id == id) {
// Remove old numbers
cImages = document.getElementById("cImages");
if (cImages.firstChild) {
while (cImages.firstChild)
{
cImages.removeChild(cImages.firstChild);
}
}
// Reset Array
proImages.length = 0;
eProject.photos = eProject.getElementsByTagName("photos")[0];
eProject.phot = eProject.photos.getElementsByTagName("photo");
pCount = eProject.phot.length;
i = 0;
for (i; pCount; i = i + 1) {
/*
* THIS IS WHERE THE ERROR IS
*/
eProject.photo = eProject.phot[i];
// This is the line of code that generates the error message
eProject.link = eProject.photo.getElementsByTagName("edit")[0].firstChild.data;
proImages[i] = eProject.link;
dynamImg = document.getElementById('dynamImg');
dynamImg.src = proImages[0];
dynamImg.setAttribute('onclick', 'getNumImg(1)');
nButton = document.createElement('button');
nButtonTxt = document.createTextNode(i + 1);
nButton.appendChild(nButtonTxt);
nButton.type = "button";
nButton.value = i;
if (nButton.value == '0') {
nButton.setAttribute('id', 'nButtonSelect');
}
nButton.setAttribute('onclick', 'getNumImg(' + i + ')');
cImages.appendChild(nButton);
}
break;
}
}
}
答案 0 :(得分:1)
我是否正确你在另一个内部有两个循环,在这两个循环中你使用“i”变量作为迭代器?你不应该在第二个循环中使用“j”吗?
答案 1 :(得分:1)
我认为您希望在for循环中for (i; i < pCount; i = i + 1) {
(请注意i <
) - 否则只是检查pCount是否已定义并将无限期运行。我怀疑当i
大于eProject.phot
中的元素数量时会出现错误,此时eProject.photo
将是未定义的。
答案 2 :(得分:-2)
var t = quotes[i].getElementsByTagName("t")[0].childNodes[0].nodeValue;