Этот чёртов Ajax. Проблема с Ie

  • Автор темы Biosi
  • Дата начала
Статус
Закрыто для дальнейших ответов.
B

Biosi

Гость
#1
Всем доброго времени суток. Я недавно начал изучать 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>

ПОМОГИТЕ, а?
 
E

etc

Гость
#2
xmlhttp.responseText и больше responseXML не делайте, а то "снег голова упадет, совсем больно будет" (с) :(
 
B

Biosi

Гость
#3
xmlhttp.responseText и больше responseXML не делайте, а то "снег голова упадет, совсем больно будет" (с)
Я бы с радостью, но если я буду разбирать сложный XML с помощью responseText, то, возможно, у меня не только "снег голова упадет", но и всё остальное отвалится! :(
 
E

etc

Гость
#4
А мышки плакали, но продолжали прыгать на кактусы ...
 
E

etc

Гость
#6
Не, яж на кактусы не прыгаю, я точно знаю что к чему!
 
B

Biosi

Гость
#7
Проблема заключается в том, что мне нужно разбирать XML - файлы, хранящие много информации. Т.е. много элементов - сотни. Неприемлемо работать с текстовой строкой в этом случае. Вот я и пытаюсь научиться использовать responseXML... Неужели ни кто из посетителей этого форума не может мне помочь? Люди, отзовитесь!
 
E

etc

Гость
#8
млин ... вам что не понятно в первом моем посте? какой нафик responseXML?
забудьте, как будто его и нет вовсе, и небыло никогда, и да прибудет с вами щасте :rolleyes:


а работать с респонзом можно по разному, от того что в названии есть "текст" не должно ограничивать программиста, у вас есть мощный инструмент - javascript
 
B

Biosi

Гость
#9
млин ... вам что не понятно в первом моем посте? какой нафик responseXML?
Уважаемый etc, я Вашу мысль понял. Спасибо Вам за нее. Но всё же я хотел бы разобраться, как работает responseXML, если это, конечно, возможно. Может быть, кто-то поможет мне в этом?
 
E

etc

Гость
#10
Может быть, кто-то поможет мне в этом?
Врятли, вам уже ничего не поможет ... :rolleyes: если простая логика вам отказывает ...
Еще раз, с responseXML нельзя работать!!!! впринципе!!! т.к. это ничего не гарантирует!!!
это как деление на ноль запрещено, т.е. вы конечно можете делить на ноль, но это уже как с мышками - обколитель в кровь и только.
а вот responseText - наоборот, уж незнаю сейчас стало яснее или нет ?

Ну за наезд конечно извините, но вы уж и сами ... "уперлись рогом, хочу и все тут".
 
E

etc

Гость
#12
Факт того что на ноль делить нельзя? я принимаю такие вещи как есть и не парюсь :rolleyes:
 
B

Biosi

Гость
#13
Да всё прискорбно. И то что по-видимому responseXML - безнадёжно глючная штука, и то что Вы на меня "наехали". И то что на ноль делить нельзя - а хотелось бы! Да и мышек жалко - им ведь больно!... :rolleyes:
 
B

Biosi

Гость
#15
В общем с учётом того что кроме любезно согласившегося со мной побеседовать господина etc ни кто больше не соизволил поучавствовать, так и положим: скрипач идёт далеко и на долго. Т.е. responseXML использовать крайне нежелательно. А значит придётся поднатужиться и, встав враскоряку, переваривать информацию с помощью responseText. А чтобы совсем не свихнуться, вместо XML буду работать с JSON. Спасибо. Тема исчерпана.
 
E

etc

Гость
#16
Т.е. responseXML использовать крайне нежелательно
Вы всетаки какойто "не русский" ... яж вам черным по белому рассказал, что его правильные браузеры выкинули и нет его, потому что он нафик не нужен, только замедляет работу а пользы - пшик.
 
A

abraner

Гость
#17
Сомневаюсь, что IE правильный браузер )

Проблема в том, что IE до конца "не понимает", что это xml данные.

Долго мучился с аналогичной проблемой, пока в скрипте, который формирует xml данные не вписал
header("Content-type: text/xml; charset=windows-1251");

После этого все заработало корректно.
 
Статус
Закрыто для дальнейших ответов.