Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ajax_v_deystvii.pdf
Скачиваний:
38
Добавлен:
05.03.2016
Размер:
5.83 Mб
Скачать

Глава 12. "Живой" поиск с использованием XSLT 501

о прокрутке до нужного места, заполнении полей формы и т.д. Поскольку мы к тому же сумели решить проблему поддержки Opera и Safari, в вопросе целесообразности использования XSLT-преобр азов алия у нас стало меньше еще одним аргументом против.

12.5.3. Использовать ли XSLT

В процессе работы над проектом вполне может возникнуть ситуация, когда вам придется отстаивать перед руководством или членами команды желание использовать XSLT. Возможно, вам зададут такой вопрос: "Вы динамически генерируете на сервере файл XML, так почему же нельзя точно так же сгенерировать таблицу результатов?"

По сути, мнение наших коллег-разработчиков заключается в том, что для отображения результатов пользователю мы делаем,больше работы, чем требуется. Действительно, когда браузер визуализирует таблицу результатов, на Web-странице должна быть выполнена дополнительная обработка. Вместо одного файла, код Ajax загружает два, которые впоследствии необходимо объединить.

Мы без проблем могли бы сгенерировать таблицу на сервере. Таблица результатов отображалась бы с использованием свойства responseText объекта XMLHttpRequest и возвращенного значения к HTML-элементу. Данный метод нормальный и жизнеспособный, причем содержит на один этап меньше, чем предложенный выше.

Однако при построении HTML-таблицы на стороне сервера следует подумать еще и о тех усилиях, которые придется приложить, если потребуется изменить что-то. Как обсуждалось ранее в данной главе, при построении таблицы разработчики сталкиваются с множеством проблем. Нужно подумать о кавычках, синтаксисе дескрипторов, атрибутах, обработчиках событий и о многом другом. Если пользователю потребуется изменить порядок столбцов в таблице результатов, нам придется перекодировать очень много фрагментов приложения.

Используя XSLT, мы выносим построение таблицы из кода серверной части приложения. Сервер может построить упрощенную версию таблицы результатов в формате XML. Этот формат достаточно понятен и позволяет легко выявлять ошибки. Кроме того, XSLT-файл выглядит подобно HTMLстранице. Нам не придется подсчитывать кавычки или выполнять поиск в строке, чтобы определить, имеется ли в ней дескриптор. Используя XSLT, мы можем просто посмотреть и сказать, что все правильно.

Кроме того, мы можем воспользоваться созданным Web-дизайнером шаблоном таблицы и поместить его в файл XSLT. Если нам когда-либо придется что-то изменить (например, переставить столбцы), все наши действия сведутся к операциям "вырезать-вставить''. Нам не придется морочить себе голову и проверять, нормально ли расставлены дескрипторы после модификации. Используя XSLT, мы убираем из динамического кода обработку HTMLстраницы. Благодаря этому внешний вид таблицы результатов можно будет изменить без особых проблем.

502 Часть IV. Ajax в примерах

Наконец, использование JavaScript позволяет очень легко сделать то, что при выполнении преобразования на сервере было бы просто невозможным.

Извлекать различные документы XSL, основываясь на теме, размерах экрана, языке и т.д.

Извлекать документы XML и XSL без помощи сервера.

Изучать журнал (log file) XML на локальном компьютере, не имея контроля над структурой документа XML.

Наверное, вы уже поняли, что Ajax может существенно облегчить выполнение ваших повседневных задач.

Тем не менее мы не рассмотрели еще один вопрос, связанный с "живым" поиском Ajax: как позволить пользователю сформировать закладку на страницу результатов.

12.5.4. Решение проблемы закладок

При поиске с использованием Ajax мы сталкиваемся с проблемой: создать закладку на страницу традиционным способом не получается. (Та же проблема возникает при использовании фреймов и всплывающих окон.) Закладки позволяют возвращаться в дальнейшем к результатам поиска без ввода запроса; кроме того, закладки удобно отправлять друзьям и коллегам с помощью электронной почты или приложений обмена мгновенными сообщениями. Поскольку поиск Ajax не требует дообработки на сервере, в процессе поиска мы не изменяем URL страницы, следовательно, сделав закладку на этот URL, мы просто отметим отправной пункт приложения, а не результаты, которые предполагалось сохранить.

Легким решением данной проблемы является добавление линии поведения, позволяющей запоминать результаты поиска. Мы можем создать динамическую строку, которая будет использоваться для создания динамической закладки. Эта динамическая строка будет содержать прямую ссылку на ту страницу, на которой она находится , и включать параметр строки запроса с искомым значением. Таким образом, записывая данную строку на страницу для формирования ссылки, пользователь может либо создать на нее закладку (щелкнув правой кнопкой мыши на ссылке), либо скопировать ссылку (при этом будут автоматически записаны условия поиска). Возможность считывания значения строки запроса мы опишем после того, как разберемся с созданием ссылки.

Ссылку можно создать при выполнении функции GrabNumber (). В наш документ добавляется еще один элемент span, в который мы поместим ссылку. В данном случае элемент span имеет идентификатор spanSave, как показано в листинге 12.11 (вызов метода getElementByld). Отметим, что элемент span можно разместить в любом месте страницы (что достаточно удобно Для пользователя).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]