Помогите пожалуйста разобраться
В одной папке с главным файлом лежит 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 & Co." debBalance="0,00" />
<customer debNumber="110" debName="Expotium GmbH" debBalance="0,00" />
</customers>