AJAX를 통해 검색된 XML 문서에서 사진 링크를 동적으로로드하기 위해이 코드를 작성했습니다. 응답 XML을 저장하는 전역 varibale xDoc이 있으며 매번 문서를로드 할 필요가 없도록 다른 함수에서 사용합니다. JavaScript에 대해서는 상당히 익숙하지 않으므로 자세한 내용은 훌륭합니다.JavaScript getElementsByTagName() 정의되지 않음, IE 실패, AJAX XML 파일
Chrome에서이 오류가 발생합니다. '잡히지 않은 TypeError :'getElementsByTagName '이 (가) 정의되지 않은'getElementsByTagName '을 호출 할 수 없으며 다른 브라우저에서도 유사한 오류 메시지가 표시됩니다. 그러나 내 코드는 여전히 FireFox, Chrome, Safari에서 작동합니다. 그러나 IE의 경우 모든 버전이 작동하지 않습니다. 나는 무엇이 잘못되었는지, 왜 그 요소가 정의되지 않은지 이해할 수 없다.
오류 코드는 아래 코드에 명확하게 표시되어 있습니다. 이것은 "eProject.link = eProject.photo.getElementsByTagName ("edit ") [0] .firstChild.data;"
<project>
<stuff>
<stuff>
<photos>
<photo>
<stuff>
<edit>
</photo>
</photos>
</project>
그런 다음이 자바 스크립트입니다 : 다음과 같이
내 XML의 데이터 구조는
// 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;
}
}
}
이것은 jQuery와 같은 것을 사용하면 훨씬 쉬울 것입니다. – Dutchie432
XML을 초기화 한 방법을 추가했습니다. –