Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.03.2011, 18:10
Аватар для Armen
Кандидат Javascript-наук
Отправить личное сообщение для Armen Посмотреть профиль Найти все сообщения от Armen
 
Регистрация: 28.06.2009
Сообщений: 120

Работа с XML
Помогите пожалуйста разобраться
В одной папке с главным файлом лежит xml
Хочу получить атрибут первого элемента
В Мозилле и Сафари все работает в ИЕ, Опере и Хроме нет
Помогите разобраться, почему не работает в этих броузерах
<script type="text/javascript">
	
	window.onload = function()
	{
		function ajax( options )
			{
				options = {
					// Тип http-запроса
					type: options.type || "POST",
					// URL на который должен быть послан запрос
					url: options.url || "",
					// Время ожидания ответа на запрос
					timeout: options.timeout || 5000,
					// Функция, вызываемая, когда запрос неудачен, успешен или завершен (успешно или нет)
					onComplete: options.onComplete || function(){},
					onError: options.onError || function(){},
					onSuccess: options.onSuccess || function(){},
					// Тип данных которые будут возвращены с сервера  по умолчанию просто определить, какие данные были возвращены, и действовать соответственно.
					data: options.data || ""
				};
				
				// Создание объекта запроса
				var xml = new XMLHttpRequest();
				
				// Открытие асинхронного запроса
				xml.open(options.type, options.url, true);
				
				// Ожидание отклика на запрос в течение 5 секунд  перед тем, как от него отказаться
				var timeoutLength = options.timeout;
				
				// Отслеживание факта успешного завершения запроса
				var requestDone = false;
				
				// Инициализация функции обратного вызова, которая будет запущена через 5 секунд, отменяя запрос (если он не будет к тому времени выполнен)
				
				setTimeout(function() { requestDone = true; }, timeoutLength);
				
				// Отслеживание обновления состояния документа
				xml.onreadystatechange = function()
				{
					// Ожидание, полной загрузки данных, и проверка, не истекло ли время запроса
					if ( xml.readyState == 4 && !requestDone )
					{
						// Проверка успешности запроса
						if ( httpSuccess( xml ) )
						{
							// Выполнение в случае успеха функции обратного вызова с данными, возвращенными с сервера
							options.onSuccess( httpData( xml, "xml" ) );
							
							// В противном случае произошла ошибка, поэтому нужно выполнить функцию обратного вызова для обработки ошибки
						}
						else
						{
							options.onError();
						}
						
						// Выполнение функции обратного вызова, связанной с завершением запроса
						options.onComplete();
						
						// Подчистка для экономии пространства памяти
						xml = null;
					}
				};
				
				// Установка соединения с сервером
				xml.send();
				
				// Определение успешности получения ответа HTTP
				function httpSuccess(r)
				{
					try
					{
						// Если состояние сервера предоставлено не было, и мы  фактически сделали запрос к локальному файлу, значит, он прошел успешно
						return !r.status && location.protocol == "file:" ||
						// Нас устраивает любой код состояния в диапазоне 200
						( r.status >= 200 && r.status < 300 ) ||
						// Запрос прошел успешно, если документ не подвергся изменениям
						r.status == 304 ||
						// Если файл не подвергался изменениям, Safari возвращает пустое состояние
						navigator.userAgent.indexOf("Safari") >= 0 && typeof r.status == "undefined";
					}
					catch(e) {}
					
					// Если проверка состояния не удалась, следует предположить, что запрос тоже закончился неудачей
					return false;
				}
				
				// Извлечение правильных данных из ответа HTTP
				function httpData(r,type)
				{
					// Получение заголовка content-type
					var ct = r.getResponseHeader("content-type");
					
					// Если не предоставлен тип по умолчанию, определение не возвращена ли с сервера какая-либо форма XML
					var data = !type && ct && ct.indexOf("xml") >= 0;
					
					// Получение объекта XML-документа, если сервер вернул XML, если нет — возвращение полученного с сервера текстового содержимого
					data = type == "xml" || data ? r.responseXML : r.responseText;
					
					// Если указан тип "script", выполнение возвращенного текста,  реагируя на него, как на JavaScript
					if ( type == "script" )
						eval.call( window, data );
					
					// Возвращение данных, полученных в ответе (или XML-документа, или текстовой строки)
					return data;
				}
			}
			
			ajax({url:"customers.xml", type:"GET", onSuccess: function(data)
			{
				var customer = data.documentElement.getElementsByTagName("customer");
				
				alert(customer[0].getAttribute("debName"))				
			}
		
		})

		


		
	
	
	}  // end function onload
	
</script>


xml - файл
<?xml version="1.0" encoding="utf-8"?>
<customers number="10">
	<customer debNumber="101" debName="Datahouse Ltd." debBalance="3385,18" />
	<customer debNumber="103" debName="The Optician" debBalance="365,43" />
	<customer debNumber="104" debName="Q. P. Audit Firm" debBalance="477,06" />
	<customer debNumber="105" debName="The Lawyer Office" debBalance="0,00" />
	<customer debNumber="106" debName="Famlab" debBalance="0,00" />
	<customer debNumber="107" debName="The Plumber" debBalance="0,00" />
	<customer debNumber="108" debName="The Furniture Factory" debBalance="0,00" />
	<customer debNumber="109" debName="The Dream Company" debBalance="107,58" />
	<customer debNumber="102" debName="Schmidt &amp; Co." debBalance="0,00" />
	<customer debNumber="110" debName="Expotium GmbH" debBalance="0,00" />
</customers>
Ответить с цитированием
  #2 (permalink)  
Старый 11.03.2011, 18:26
Интересующийся
Отправить личное сообщение для Добрый слоник Посмотреть профиль Найти все сообщения от Добрый слоник
 
Регистрация: 05.03.2011
Сообщений: 23

Уточни....В ИЕ, Опере и Хроме не загружается XML или XML грузится, но получить доступ к атрибуту не могешь?

Просто кода много...а думать лень

PS
Опере и Хроме работает В ИЕ6 - по понятным причинам - нет

Последний раз редактировалось Добрый слоник, 11.03.2011 в 18:34.
Ответить с цитированием
  #3 (permalink)  
Старый 11.03.2011, 18:33
Аватар для Armen
Кандидат Javascript-наук
Отправить личное сообщение для Armen Посмотреть профиль Найти все сообщения от Armen
 
Регистрация: 28.06.2009
Сообщений: 120

[quote=Добрый слоник;96151]Уточни....В ИЕ, Опере и Хроме не загружается XML или XML грузится, но получить доступ к атрибуту не могешь?

Не могу получить доступ к атрибуту
Работает только в Моззиле и в Сафари
Ответить с цитированием
  #4 (permalink)  
Старый 11.03.2011, 18:55
Интересующийся
Отправить личное сообщение для Добрый слоник Посмотреть профиль Найти все сообщения от Добрый слоник
 
Регистрация: 05.03.2011
Сообщений: 23

Я взял твой код, сохранил у себя, запустил в Опере 11.01, Хроме 10.0.648.127, Фаерфоксе 3.6.15,...в ИЕ 6 (заменив XMLHttpRequest на АктивИкс ) - везде работает - везде алерт с "Datahouse Ltd."
Ответить с цитированием
  #5 (permalink)  
Старый 11.03.2011, 18:59
Аватар для Armen
Кандидат Javascript-наук
Отправить личное сообщение для Armen Посмотреть профиль Найти все сообщения от Armen
 
Регистрация: 28.06.2009
Сообщений: 120

Сообщение от Добрый слоник Посмотреть сообщение
Я взял твой код, сохранил у себя, запустил в Опере 11.01, Хроме 10.0.648.127, Фаерфоксе 3.6.15,...в ИЕ 6 (заменив XMLHttpRequest на АктивИкс ) - везде работает - везде алерт с "Datahouse Ltd."
Странно, а у меня не работает
Лдно, попробую дома еще
Спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 14.03.2011, 20:49
Профессор
Отправить личное сообщение для розовый слоник Посмотреть профиль Найти все сообщения от розовый слоник
 
Регистрация: 17.10.2009
Сообщений: 258

насколько я понял ты просто не кроссбраузерно это все делаешь, сделай различие для браузеров.
вот посмотри на это и подумай где ты ошибся.
try { return new XMLHttpRequest() }  
         catch(e)   
         {  
             try { return new ActiveXObject('Msxml2.XMLHTTP') }  
             catch(e)   
             {  
                 try { return new ActiveXObject('Microsoft.XMLHTTP') }  
                 catch(e) { return null; }  
             }  
         }
Ответить с цитированием
  #7 (permalink)  
Старый 16.03.2011, 09:43
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от розовый слоник
вот посмотри на это
https://github.com/Kolyaj/CrossJS/bl...HttpRequest.js
Ответить с цитированием
  #8 (permalink)  
Старый 16.03.2011, 13:59
Профессор
Отправить личное сообщение для розовый слоник Посмотреть профиль Найти все сообщения от розовый слоник
 
Регистрация: 17.10.2009
Сообщений: 258

согласен это лучше
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалить из памяти весь XML документ? EisBerg Events/DOM/Window 1 03.04.2010 14:45
Изменение текста в XML (не удаленный, но править нельзя) Qwe2Qwe Общие вопросы Javascript 3 28.02.2010 12:44
Не получается загрузить xml из php Alekson jQuery 2 08.07.2009 09:33
Работа на javascript с xml masmash Общие вопросы Javascript 0 03.01.2009 23:20