2015-06-19 4 views
0

presentation.htm:responseXML является нулевым, JavaScript

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

Кто-нибудь знает, как это исправить?

ответ

1

Ваш «checkDescXMLload» обратный. Ваш xml появится, когда readyState === 4 и status === 200, а не наоборот. Как написано, вы попробуете прочитать xml на readyState 1,2 и 3, если он еще не придет. Просто включите 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 говорит, ваш XML будет готов только для чтения, как только вы достигнете состояния 4 и статус 200.

Если вы хотите сделать что-то на readystate 0,1,2 и 3, а также, вы действительно можете использовать «корпус переключателя». Если вы не хотите что-либо делать с другими версиями, вы можете просто использовать DescXMLDocument.onload() вместо DescXMLDocument.onreadystatechange, который будет работать (почти?) Во всех современных браузерах.

+0

вот так? он работает только в ie' switch (DescXMLDocument.readyState) { \t case 1: \t \t document.getElementById ('progressCount'). innerHTML = " "; \t \t break; \t кейс 2: \t \t document.getElementById ('progressCount'). InnerHTML = " "; \t \t break; \t кейс 3: \t document.getElementById ('progressCount'). InnerHTML = " "; \t \t break; \t случай 4: \t \t, если (DescXMLDocument.readyState == 4 && DescXMLDocument.status == 200) { \t \t \t оповещения ("Ошибка"); \t \t} else { \t \t \t}; ломать; \t по умолчанию: \t \t document.all ["progressCount"]. InnerHTML = " "; \t \t break; \t} ' – Dmitry

Смежные вопросы