| Предисловие | 1 |
| |
| Аудитория | 3 |
| Краткое содержание книги | 4 |
| Условные обозначения | 7 |
| Права на использование кода | 8 |
| Обратная связь | 8 |
| Safari® Enabled | 9 |
| Благодарности | 9 |
| |
| Глава 1. Подготовка к добавлению Ajax | 10 |
| |
| Технологии, составляющие Ajax | 12 |
Естественное движение вперед | 13 |
Технологии: обзор книги | 14 |
| С чистого листа | 17 |
Валидаторы XHTML- и HTML-кода | 18 |
Валидаторы CSS-кода | 20 |
Проверка доступности | 21 |
| Преобразование таблиц в формат CSS | 22 |
| Продолжаем преобразования — элемент за элементом | 27 |
| Индивидуальные особенности браузеров | 59 |
Управляем страницей и добавляем Ajax | 29 |
Устанавливаем контроль | 30 |
| Понимание нужд клиентов | 32 |
Узнайте своих пользователей | 32 |
Политика открытых дверей | 33 |
План | 35 |
| Разработка структуры сайта | 36 |
Познакомьтесь со своим читателем | 37 |
Безопасность и надёжность | 38 |
Сильная и слабая связь | 38 |
| Постепенное улучшение или полная реконструкция? | 39 |
| |
| Глава 2. Кусочки Ajax | 42 |
| |
| Веб-приложение | 42 |
Структура объекта XMLHttpRequest | 50 |
| Подготовка объекта к использованию | 52 |
| Подготовка и отправка запроса | 54 |
GET, POST и REST | 54 |
Параметры | 56 |
Отправка запроса | 57 |
| Обработка Ajax-ответа | 61 |
Простой и быстрый ответ: HTML-фрагмент и innerHTML | 63 |
Работа с более традиционным XML | 67 |
Упрощение обработки с помощью JSON | 72 |
(Х)НТМL-фрагмент | 77 |
| Конечные точки, песочница JavaScript и виджеты | 82 |
Конечные точки JSON и создание динамического сценария | 83 |
Динамические сценарии с XML | 86 |
| Меры безопасности | 87 |
| Первый взгляд на производительность | 88 |
| Последнее слово о синхронном и асинхронном | 90 |
| |
| Глава 3. Терминология и инструменты Ajax | 92 |
| |
| Prototype | 93 |
Свойство prototype языка JavaScript | 99 |
Ассоциативные массивы и риск Prototype | 100 |
Внешние библиотеки: риск и преимущества | 101 |
| script.aculo.us | 102 |
Эффекты script.aculo.us | 104 |
| Rico | 106 |
Оперативная прокрутка Ajax | 106 |
Виджеты Rico | 107 |
Песочница JavaScript и прокси | 108 |
| Dojo | 109 |
Цепочка обработчиков событий | 111 |
Декларативный HTML | 112 |
Как с помощью JavaScript обойти нестандартные атрибуты | 114 |
| Другие библиотеки | 117 |
jQuery | 117 |
MochiKit | 118 |
Пользовательский интерфейс Yahoo! UI | 119 |
mooTools и moo.fx | 119 |
Библиотека Sarissa | 120 |
WZ_JsGrapliics и qForms | 120 |
Итак далее | 121 |
| |
| Глава 4. Интерактивные эффекты | 122 |
| |
| Обработка событий в Ajax | 123 |
Сопровождаемый обработчик событий | 123 |
Смешанный обработчик событий | 124 |
Система обработки событий Dojo Event System и целевой объект | 127 |
| Оперативная (ЛТ) информация | 132 |
Форма для справки | 133 |
Всплывающая подсказка | 142 |
| Предварительный просмотр | 147 |
Оперативный просмотр | 147 |
Ajax-просмотр | 150 |
| Выделение цветом выполненных и невыполненных операций | 153 |
Таймеры и анимация | 153 |
Ajax-таймеры | 155 |
Подсветка | 157 |
| |
| Глава 5. Пространство. Последняя граница | 164 |
| |
| Горизонтальный интервал. Accordion | 165 |
Создание эффекта | 166 |
Переходный accordion | 172 |
Определение ширины и высоты элемента | 172 |
Окончательная отделка перехода | 174 |
Использование готового эффекта accordion | 176 |
Упаковка кода эффекта | 181 |
Смешивание эффекта accordion и Ajax-запросов | 188 |
| Страницы с вкладками | 196 |
Взгляд на содержимое, разбитое на вкладки | 196 |
Возвращаясь к упаковке: создание универсальных вкладок | 204 |
Использование YUI TabView | 205 |
Вкладки и доступность | 209 |
| Слои | 209 |
| |
| Глава 6. Динамические данные | 217 |
| |
| Редактирование по месту | 218 |
Добавление изменяемого поля | 218 |
Сторона клиента | 220 |
Сторона сервера | 229 |
| Редактирование по месту: производительность, безопасность и доступность | 232 |
Предотвращение SQL-инъекций | 232 |
Производительность и доступность | 233 |
Улучшения | 234 |
| Подсвечивание изменений | 236 |
Сигнализация удаления | 236 |
Запрос и подсвечивание обновлений | 242 |
| Повторный взгляд на доступность внутристраничных обновлений | 250 |
Повторный взгляд на внутристраничное удаление | 251 |
Повторный взгляд на внутристраничные добавления | 252 |
| Оперативная проверка достоверности | 253 |
| Производительность и двухфазное подтверждение | 257 |
Ajax, который ни с кем не конфликтует | 258 |
Ajax, кэширование, транзакции базы данных | 259 |
| Эффекты для данных внешних библиотек | 261 |
Разработка и обслуживание форм | 261 |
Сортировка drag-and-drop библиотеки script.aculo.us | 261 |
Проверка достоверности Adobe Spry | 263 |
Другие библиотеки, обрабатывающие данные | 264 |
| |
| Глава 7. История, навигация, место и одностраничные приложения | 266 |
| |
| Многостраничный контент бросает вызов | 267 |
Создание каркаса слайд-шоу | 269 |
Создание слайд-шоу фотографий | 277 |
Разбивка текста | 282 |
Пролистывание данных | 286 |
| Запомним место | 292 |
Запоминание места и фрагменты страницы | 292 |
Запоминание места своевременно | 296 |
Разница между умным и сообразительным | 300 |
| Старое и новое, плечом к плечу | 301 |
| Новый взгляд на страницу | 312 |
| Post-Mortem | 316 |
| |
| Глава 8. Добавление сложных визуальных эффектов | 317 |
| |
| Сложные трюки CSS | 318 |
Закругленные углы | 319 |
Слайдеры и полосы прокрутки | 320 |
Веб-меню | 327 |
Перемещаемый контейнер | 328 |
| Масштабируемая векторная графика SVG | 332 |
Включение SVG | 332 |
Добавляем script | 335 |
Встроенные SVG-элементы | 337 |
| Быстрый взгляд на SVG | 338 |
Основные фигуры и атрибуты | 338 |
Градиенты, фильтры, эффекты и defs | 341 |
| Смешиваем SVG и Ajax | 342 |
HTML5 Canvas | 347 |
| Будущее графики | 351 |
| |
| Глава 9. Сайт-мэшап | 353 |
| |
| Карты Google | 354 |
Карты Google: быстро и просто | 354 |
Из пункта А в пункт Б | 357 |
| Второй сервис — Flickr | 362 |
Создаём мэшап | 363 |
Создание объектов фотографий и повторное сравнение локальных функций |
с Prototype | 369 |
Переделываем Flickr/Google в страницу с вкладками | 373 |
| Добавляем Technorati к нашему мэшапу | 378 |
| Реконструирование мэшапа | 388 |
Доступные вкладки | 389 |
Карты Google и IE, или Я отпускаю тебя | 394 |
Абстрагирование веб-сервиса | 395 |
| Реконструированные клиенты | 400 |
Приложение без сценариев | 401 |
Новый Ajax-клиент | 404 |
| Подытоживая мэшап | 414 |
| |
| Глава 10. Масштабирование, инфраструктура и основы основ | 415 |
| |
| Каркасы: сильная связь vs слабая связь | 416 |
| Веб-сервис: ресурсы и безопасность | 418 |
| Ajax-библиотеки: свои или чужие | 419 |
| Основы Ajax-проектирования | 421 |
Упаковка функциональности в модули | 421 |
Сопровождение и тестирование | 422 |
Утечка памяти, локальное хранение и надёжность | 423 |
Приведение каждого эффекта к простейшему виду | 424 |
Важные области сайта | 425 |
Не переборщите с мэшапами | 425 |
Множество устройств | 426 |
Поменьше «крутых» эффектов | 426 |
«Круто» не всегда плохо | 427 |
| Каркасы дня | 428 |
ASP.NET и AJAX | 428 |
Java и GWT | 430 |
PHP-каркасы | 431 |
Python, GWT и Django | 432 |
Эй! Это ж Perl! | 432 |
Ruby on Rails, Ajax и сильная связь | 433 |
| Идите и добавляйте Ajax | 433 |
| |
| Предметный указатель | 434 |