http://blagtalkan.ru
http://oktpoisk.ru
http://mysorru.ru/
http://san-okt.ru/
http://pes6evolution.ru/
http://chasikigov.ru
http://serafimsovet.ru
http://filmsgov.ru
http://free-domen.ru
http://fithonda.ru/forums/index.php
http://avtogov.ru
http://www.1001bilet.com.ua/base/on-line/
http://pravilavoini.ru
http://school41ufa.ru
http://rusrav4.ru
loadFeed() | Книга AJAX
 

Функция load Feed () отвечает за загрузку заданной рассылки в об XParser и заполнение панели заголовками новостей. Эта функция ■ же выступает в роли обработчика события onclick, возникающего в| зультате щелчка мышью по ссылке в панели Feeds (Рассылки), принимает аргумент sFileName, в котором передается содержимое вя бута filename элемента из feeds.xml. Если функция loadFe вызывается как обработчик события, содержимое sFileName заме! ся значением атрибута f rFileName, упоминавшегося ранее.
function loadFeed(sFileName) {
sFileName = (typeof sFileName == "string")?sFileName: this.getAttribute("frFileName");
Два основных элемента отображения списка заголовков новостей i обходимо отыскать в первую очередь - это divItemList и divViewinglt
var divItemList = document.getElementById("divItemList"); var divViewingltem = document.getElementByldC'divViewingltem");
Список заголовков новостей отображается в элементе divItemList, а ( Viewingltem будет содержать название рассылки и ее тип.
var sName = feedsFile.getLinkByFileName(sFileName).name; toggleLoadingDiv(true);
С помощью метода feedsFile.getLinkByFileName извлекается имя сылки. Вслед за этим вызывается функция toggleLoadingDiv(), она i водит окно с информацией о ходе загрузки и обеспечивает обрат визуальную связь с пользователем.
Список заголовков новостей не что иное, как список элементов <а j созданных методами DOM. Но прежде чем добавлять что-либо, из j кумента необходимо удалить все существующие элементы. Это трудно сделать с помощью цикла while:
while (divItemList.hasChildNodesO) {
divItemList.removeChild(divItemList.lastChild);
}
Так как дочерними элементами в divItemList являются только заголов¬ки новостей, мы без опаски можем удалить все дочерние элементы. После удаления старых заголовков новостей создается объект XParser:
sFileName = "xml.aspx?xml=" + sFileName; oFeed = new XParser(sFileName);
Значение переменной sFileName изменяется таким образом, чтобы она содержала URL серверной части приложения, после чего она передает¬ся конструктору XParser.
Выполнение запроса объекта XMLHttp может занять некоторое время, это обстоятельство необходимо учитывать во избежание ошибок. Для решения этой проблемы XParser предоставляет событие, onload, которое возникает тогда, когда запрос XMLHttp достигает состояния ОК (код состояния 200). В приложении FooReader.NET событие onload ис¬пользуется для того, чтобы записать заголовки новостей в divItemList, загрузить содержимое первой из новостей в панель просмотра и скрыть окно с информацией о ходе загрузки.
oFeed.onload = function () {
var oFragment = document.createDocumentFragment(); divViewingltem.innerHTML = sTitle + " (" + oFeed.type + ")";
Точно так же, как и в функции initQ, здесь сначала создается фраг¬мент документа, чтобы уменьшить нагрузку на пользовательский ин¬терфейс. Как уже отмечалось, элемент divViewItem предназначен для отображения названия рассылки и ее типа, для чего служит его свой¬ство innerHTML. Такой способ предоставления дополнительной инфор¬мации пользователю играет очень большую роль в приложениях Ajax. Эта информация никак не влияет на работоспособность приложения, ио она лишний раз напоминает пользователю, что он просматривает.
Свойство innerHTML помогает упростить приложение. При таком подходе требуется меньший объем программного кода для изменения содержимого элемента, чем в случае применения методов интерфейса D0M. В идеале можно было бы использовать свойство innerText, но, к сожалению, Firefox не поддер¬живает его.
Теперь создадим элементы с заголовками новостей. Заголовки разме¬щаются в элементах <а />, содержащих два элемента : в первом размещается заголовок текущей новости, а во втором - дата. Как в слу¬чае со списком рассылок, элементы списка создаются с помощью мето¬да createElement().
for (var i = 0; i < oFeed.items.length; i++) { var oltem = oFeed.items[i]; var oA = document.createElement("a"); oA.className = "itemlink"; oA.href = "#•';
oA.onclick = itemClick; oA.ondblclick = doubleclick; oA.id = "oA" + i; oA.setAttribute("frFeedltem",i);
Первым создается элемент . В атрибуты элемента записывай типичные для такого случая значения: в атрибут class записывав имя класса CSS itemlink, в атрибут href записывается "#", в атрн click записывается имя функции itemClick, в качестве обработчика* бытия ondblclick, возникающего по двойному щелчку на ссылке, значается функция doubleClick(), а в атрибут id записывается зна ние переменной оАх, где х - порядковый номер элемента.
Описание функции itrmClick() вы найдете в следующем разделе.
Вслед за этим создается первый элемент . Этот элемент будет» держать заголовок новости:
var divTitle = document.createElement("div"); divTitle.className = "itemheadline"; divTitle.innerHTML = oltem.title.value;
Обратите внимание, что здесь также вместо метода createTextNode()i пользуется свойство innerHTML. Дело в том, что заголовки новостей] гут содержать форматирование HTML (будь то сущности языка'. или элементы). Теперь нам осталось создать еще один элемент необходимо добавить в элемент <а />, рый, в свою очередь, должен быть добавлен во фрагмент докумев
oA.appendChild(divTitle); oA.appendChild(divDate); oFragment.appendChild(oA);
По завершении работы цикла, когда все элементы будут созл фрагмент документа или, если быть более точным, то список за ков новостей, может быть добавлен в документ:
divItemList.appendChild(oFragment);
После этого вызывается функция itemClickO, чтобы загрузить пе новость в панель просмотра, и окно с информацией о ходе заг рассылки скрывается:
itemClick(O); toggleLoadingDiv();
Панель с заголовками новостей заполнена. Осталось лишь загрузить первую из новостей в панель просмотра. Эту работу выполняет функ¬ция itemClick().