responseXML为null,javascript

时间:2015-06-19 09:56:32

标签: javascript xml xmlhttprequest parsexml

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为null

有谁知道如何修复它?

1 个答案:

答案 0 :(得分:1)

您的'checkDescXMLload'是向后的。你的xml将在readyState === 4和status === 200时到达,而不是相反。 如上所述,您将尝试在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才会准备好阅读。

如果你想在即兴状态0,1,2和3上做一些事情,你确实可以使用'switch case'。 如果你不想对其他的readystate做任何事情,你可以使用DescXMLDocument.onload()而不是DescXMLDocument.onreadystatechange,它可以在(几乎?)所有现代浏览器中使用。