Показать сообщение отдельно
  #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>
Ответить с цитированием