0

presentation.htm

if(!system.ie) {
    try {
        DescXMLDocument = new XMLHttpRequest();
        DescXMLDocument.async = false;
        DescXMLDocument.onreadystatechange=checkDescXMLload;
        DescXMLDocument.open("get", "description.xml", true);
        DescXMLDocument.send(null);
    }
}

tacore.js

if (DescXMLDocument.readyState == 4 && DescXMLDocument.status == 200) {
    alert("Error");
} else {
    document.getElementById('progressCount').innerHTML="��������o";
    document.getElementById('progressDiv').style.display="none";
    anodes=DescXMLDocument.responseXML.documentElement.childNodes;
    document.getElementById('zback').innerHTML = anodes[0].text;
    document.getElementById('coursepicture').innerHTML = anodes[1].text;
    document.getElementById('chaptername').innerHTML = anodes[2].text;
    document.getElementById('buttonsdiv').innerHTML = anodes[3].text;
    document.getElementById('generaldescription').innerHTML = anodes[4].text;
    document.getElementById('generalhelp').innerHTML = anodes[5].text;
    document.title=document.getElementById('chaptername').innerText;
}

我收到以下错误:

DescXMLDocument.responseXML 为空

有谁知道如何修理它?

4

1 回答 1

1

您的“checkDescXMLload”是倒退的。当 readyState === 4 和 status === 200 时,您的 xml 将到达,而不是相反。如所写,您将尝试读取readyState 1,2 和3 上的xml,当它尚未到达时。只需切换 if else 并将错误警报移至其他地方。

checkDescXMLload = function() {
    if (DescXMLDocument.readyState === 4) {
        if (DescXMLDocument.status === 200) {
            ...... /* your response handler */
            anodes = DescXMLDocument.responseXML.documentElement.childNodes;
            ...... /* your response handler */
        }
        else {
            alert('error');
        }
    }
}

正如 Anik 所说,只有在达到状态 4 和状态 200 时,您的 xml 才会准备好读取。

如果您还想在 readystate 0、1、2 和 3 上执行操作,您确实可以使用“switch case”。如果您不想对其他就绪状态做任何事情,您可以只使用 DescXMLDocument.onload() 而不是 DescXMLDocument.onreadystatechange,它适用于(几乎?)所有现代浏览器。

于 2015-06-19T10:04:56.267 回答