B
Biosi
Всем доброго времени суток. Я недавно начал изучать AJAX. В процессе изучения решил создать небольшой проект, в котором будут использованы основные возможности AJAX и JavaScript в частности. В общем, проект я создал, протестировал его в Opera - всё работает! Но радовался я недолго. Ровно до того момента, как "попробовал" его в нашем родном и всеми любимом Internet Explorer 7. Здесь мой проект споткнулся о свойство объекта XMLHTTP, называемое responseXML. Именно это свойство содержит обьект document необходимого мне XML-файла, в котором хранятся нужные мне данные.
В интернете решение я не нашел. Везде пишут, что достаточно написать "responseXML.getElementsByTagName('имя тэга')" и будет мне счастье. Но счастья нет, потому как в IE это не работает
Уж я пытался и через .body, и через .documentElement, но нет, пропарсить искомый XML мне никак не удается.
Вот небольшой примерчик, который сам по себе ни какого смысла не имеет, кроме того, что иллюстрирует мою проблему.
1) Файл XML (testResponse.xml):
<?xml version="1.0" encoding="windows-1251"?>
<resp>OK!</resp>
2) Файл со скриптом, который будет пытаться парсить вышеозначенный xml (testResponse.html):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Тест</title>
</head>
<body>
<script language="javascript" type="text/javascript">
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
var xmlhttp = getXmlHttp();
xmlhttp.open('GET', 'testResponse.xml', true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if((xmlhttp.status == 200) || (xmlhttp.status == 0)) {
alert(xmlhttp.responseText);
var childEl = document.createElement('div');
// ВОТ ЭТА СТРОКА, КОТОРАЯ ПРЕДСТАВЛЯЕТ ПРОБЛЕМУ:
childEl.innerHTML = xmlhttp.responseXML.getElementsByTagName('resp').item(0).firstChild.data;
document.body.appendChild(childEl);
}
}
};
xmlhttp.send(null);
alert('Конец скрипта');
</script>
</body>
</html>
ПОМОГИТЕ, а?
В интернете решение я не нашел. Везде пишут, что достаточно написать "responseXML.getElementsByTagName('имя тэга')" и будет мне счастье. Но счастья нет, потому как в IE это не работает
Уж я пытался и через .body, и через .documentElement, но нет, пропарсить искомый XML мне никак не удается.
Вот небольшой примерчик, который сам по себе ни какого смысла не имеет, кроме того, что иллюстрирует мою проблему.
1) Файл XML (testResponse.xml):
<?xml version="1.0" encoding="windows-1251"?>
<resp>OK!</resp>
2) Файл со скриптом, который будет пытаться парсить вышеозначенный xml (testResponse.html):
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Тест</title>
</head>
<body>
<script language="javascript" type="text/javascript">
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
var xmlhttp = getXmlHttp();
xmlhttp.open('GET', 'testResponse.xml', true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if((xmlhttp.status == 200) || (xmlhttp.status == 0)) {
alert(xmlhttp.responseText);
var childEl = document.createElement('div');
// ВОТ ЭТА СТРОКА, КОТОРАЯ ПРЕДСТАВЛЯЕТ ПРОБЛЕМУ:
childEl.innerHTML = xmlhttp.responseXML.getElementsByTagName('resp').item(0).firstChild.data;
document.body.appendChild(childEl);
}
}
};
xmlhttp.send(null);
alert('Конец скрипта');
</script>
</body>
</html>
ПОМОГИТЕ, а?