Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Этот чёртов AJAX

#1 Гость_Biosi_*

Гость_Biosi_*
  • Гости
0

Отправлено 11 Март 2009 - 17:38

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

ПОМОГИТЕ, а?

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Март 2009 - 10:52

Да уж я переписал
xmlObj=xmlhttp.responseXML.documentElement;
childEl.innerHTML = xmlObj.firstChild.data;
Работает в FF, но не работает в IE7. Я обычно XML не возвращаю, приду вечером, почитемс ещё ;)
  • 0

#3 Гость_Biosi_*

Гость_Biosi_*
    Topic Starter
  • Гости

Отправлено 12 Март 2009 - 12:58

Спасибо, что помогли переформатировать моё сообщение в более удобочитаемый вид. Да, давненько я на форумах не общался, забыл уже как чё делается. Но, к сожалению, действительно IE7 остался непобедимым - XML так и не парсится.
  • 0

#4 KURT [197BD]

KURT [197BD]
  • Пользователь
  • 31 сообщений
  • Репутация: 0

Отправлено 12 Март 2009 - 18:17

наверно проблемма в том что IE для тега DIV не поддерживает свойство innerHTML? попробуйте использовать тег SPAN

вместо
...
var childEl = document.createElement('div');
...
использовать
...
var childEl = document.createElement('span');
...

  • 0

#5 Гость_Biosi_*

Гость_Biosi_*
    Topic Starter
  • Гости

Отправлено 12 Март 2009 - 18:26

Нет, дело не в этом. Обычный текст (не responseXML) данный скрипт добавляет спопкорно.

На других форумах я узнал, что responseXML, к сожалению, то ли сильно глючит, то ли просто не поддерживается IE. По-видимому, придётся использовать responseText, а вместо XML брать JSON (для удобства).


  • 0

#6 Гость_Biosi_*

Гость_Biosi_*
    Topic Starter
  • Гости

Отправлено 12 Март 2009 - 21:17

В общем я пришел к выводу о невозможности корректного использования responseXML. В ходе разбирательств выяснилось что данный метод не работает в Эксплорере. Выходом из этой ситуации вижу использование responseText, а чтобы проще мне было - вместо XML буду использовать JSON. Всем спасибо, вопрос решен.
  • 0

#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 13 Март 2009 - 22:36

Это вам спасибо за пояснения, но всё же...
В общем я пришел к выводу о невозможности корректного использования responseXML. В ходе разбирательств выяснилось что данный метод не работает в Эксплорере.
Ваше высказывание о неработоспособности метода responseXML не точно. Данный метод возвращает object [xmlDOMdocument], проверенно лично мной. А вот уже кривость работы в IE с данным объектом очень даже возможна. Не зря осла прозвали ослом.

Кстати я нашёл рабочий пример
_http://www.howtocreate.co.uk/tutorials/jsexamples/importingXML.html
сам файл с функцией
_http://www.howtocreate.co.uk/jslibs/importxml.js

Стоит только переделать под свои нужды ;)
  • 0


Оформление форума – IPBSkins.ru