русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Ajax и динамические сценарии


Дата добавления: 2015-07-09; просмотров: 848; Нарушение авторских прав


 

Термин Ajax обозначает архитектуру веб_приложений, которая основана на вза_ имодействии с протоколом HTTP и объектом XMLHttpRequest. (В действительности для многих объект XMLHttpRequest и Ajax являются синонимами.) Ajax – это акро_ ним от «Asynchronous JavaScript and XML» (асинхронный JavaScript и XML).1 Термин был придуман Джессом Джеймсом Гарреттом (Jesse James Garrett) и впервые появился в феврале 2005 года в его статье «Ajax: A New Approach to Web Applications» (Ajax: новый подход к разработке веб_приложений), которую можно найти по адресу http://www.adaptivepath.com/publications/essays/archi' ves/000385.php.

 

1 Значимость архитектуры Ajax сложно переоценить, и наличие простого названия лишь послужило катализатором начала революции в разработке веб_приложений. Однако, как оказывается, этот акроним недостаточно полно описывает технологии, используемые Ajax_приложениями. Все клиентские JavaScript_сценарии исполь_ зуют механизм обработки событий и потому являются асинхронными. Кроме того, применение XML в веб_приложениях, разработанных в стиле Ajax, часто бывает удобным, но это совершенно не обязательно. Главная особенность Ajax_приложе_ ний – взаимодействие с протоколом HTTP, но это никак не отражено в акрониме.


 

510 Глава 20. Работа с протоколом HTTP

Объект XMLHttpRequest, на котором основана технология Ajax, был доступен в броузерах Microsoft и Netscape/Mozilla еще за четыре года до появления статьи Гарретта, но он никогда до этого момента не привлекал такого внимания.1 Все изменилось в 2004 году, когда компания Google выпустила новую версию почто_ вого веб_приложения Gmail, использующего объект XMLHttpRequest. Сочетание этого высококлассного приложения, выполненного на профессиональном уров_ не, и статьи Гарретта, вышедшей в начале 2005 года, открыло шлюзы для бурно_ го интереса к Ajax.



 

Ключевой особенностью любого Ajax_приложения является взаимодействие с веб_ сервером по протоколу HTTP без необходимости полной перезагрузки страницы. Поскольку объемы передаваемых данных невелики и броузер не тратит время на анализ и отображение целого документа (а также связанных с ним таблиц сти_ лей и сценариев), время отклика таких приложений оказывается очень неболь_ шим. В результате веб_приложения стали напоминать традиционные настоль_ ные приложения.

 

Необязательной особенностью Ajax_приложений является использование фор_ мата XML для представления данных во время обмена между клиентом и серве_ ром. В главе 21 демонстрируется, как можно манипулировать XML_данными из JavaScript_сценариев, включая исполнение XPath_запросов и выполнение XSL_ преобразований XML_документов в формат HTML. В некоторых Ajax_приложе_ ниях для отделения содержимого (данные в формате XML) от представления (HTML_форматирование, выполненное с помощью таблиц стилей XSL) исполь_ зуется язык XSLT. Такой подход дает дополнительные преимущества, умень_ шая объемы данных, передаваемых от сервера клиенту, и перенося выполнение необходимых преобразований на сторону клиента.

 

Существует возможность формализовать Ajax в терминах RPC_механизма2. В та_ кой формулировке веб_разработчики используют низкоуровневые Ajax_библио_ теки как на стороне сервера, так и на стороне клиента, чтобы облегчить высоко_ уровневое взаимодействие между клиентом и сервером. В данной главе не опи_ сываются никакие библиотеки, реализующие RPC средствами Ajax, потому что основное внимание здесь уделяется низкоуровневым технологиям, обеспечи_ вающим работу архитектуры Ajax.

 

Ajax – достаточно молодая прикладная архитектура, и описывающая ее статья Гарретта заканчивается призывом к действию, который стоит того, чтобы при_ вести его здесь:

Самые большие сложности в разработке Ajax_приложений лежат вовсе не

в технической плоскости. Технологии, составляющие основу Ajax, достаточно

 

1 Я сожалею, что не взялся за описание объекта XMLHttpRequest в четвертом издании этой книги. То издание было во многом основано на стандартах, и объект XMLHttp_ Request не был включен в него просто потому, что он никогда не был стандартизо_ ван. Если бы в то время я осознавал мощные возможности, которые предоставля_ ет работа с протоколом HTTP, я нарушил бы свои правила и включил бы описание объекта в книгу.

2 Аббревиатура RPC происходит от Remote Procedure Call (вызов удаленных проце_ дур) и описывает стратегию, используемую в распределенных вычислениях для упрощения взаимодействий между клиентом и сервером.


 

20.3. Ajax и динамические сценарии
   

 

зрелые, устоявшиеся и понятные. Главные проблемы заключаются в том, что разработчики таких приложений забывают думать о существующих ограниче_ ниях Всемирной паутины и начинают воображать себе более широкий, более богатый диапазон возможностей.

Это будет забавно.

 

Пример применения Ajax

 

Примеры, приводившиеся до сих пор в этой главе, представляли собой вспомога_ тельные функции, демонстрирующие порядок использования объекта XMLHttpRe_ quest. Они не показывали, зачем может потребоваться этот объект или какие вы_ годы он дает. Как отмечалось в цитате из статьи Гарретта, архитектура Ajax от_ крывает массу новых возможностей, которые только начали исследоваться. Сле_ дующий пример достаточно прост, но в нем демонстрируются некоторые вспомо_ гательные функции и ряд возможностей, предоставляемых архитектурой Ajax.

 

Пример 20.8 представляет собой ненавязчивый сценарий, регистрирующий об_ работчики событий в ссылках документа, чтобы с их помощью отображать всплывающие подсказки при наведении на них указателя мыши. Для ссылок, указывающих на тот же сервер, откуда был загружен сам документ, сценарий выполняет HTTP_запрос HEAD с помощью объекта XMLHttpRequest. Из возвра_ щаемых сервером заголовков извлекаются тип содержимого, размер и дата по_ следнего изменения документа, на который указывает ссылка, и эта информа_ ция отображается в виде всплывающей подсказки (рис. 20.1). Тем самым всплы_ вающие подсказки предоставляют своего рода средство предварительной оценки целевого документа, что может помочь пользователям в принятии решения о том, стоит ли щелкать на этой ссылке или нет.

 

В основе реализации лежит класс Tooltip, разработанный в примере 16.4 (здесь не требуется расширенная версия класса, которая приводилась в примере 17.3). Кроме того, здесь используется модуль Geometry из примера 14.2 и вспомогатель_ ная функция HTTP.getHeaders() из примера 20.4. В программный код заложено несколько уровней асинхронности: в форме это обработчик события onload, обра_ ботчик события onmouseover, таймер и функция обратного вызова для объекта XMLHttpRequest. Все это приводит к созданию глубоко вложенных функций.


 

Рис. 20.1. Всплывающая подсказка Ajax


 

512 Глава 20. Работа с протоколом HTTP

Пример 20.8. Всплывающие подсказки Ajax

/**

* linkdetails.js

 

*

* Данный модуль добавляет обработчики событий к ссылкам в документе,

* с помощью которых отображаются всплывающие подсказки при задержке

* указателя мыши над этими ссылками в течение полусекунды. Если ссылка

* указывает на документ на том же сервере, что и исходный документ,всплывающая

* подсказка будет включать в себя информацию о типе, размере и дате, которая

* извлекается с помощью HTTP_запроса HEAD, выполняемого объектом XMLHttpRequest.

 

*

* Данный модуль требует наличия модулей Tooltip.js, HTTP.js и Geometry.js

*/

(function() { // Анонимная функция, которая содержит все необходимые имена

 

// Создает объект подсказки var tooltip = new Tooltip();

 

// Настроить вызов функции init() после загрузки документа

 

if (window.addEventListener) window.addEventListener("load", init, false); else if (window.attachEvent) window.attachEvent("onload", init);

 

// Вызывается после загрузки документа function init() {

 

var links = document.getElementsByTagName('a');

 

// Цикл по всем ссылкам и добавление обработчиков событий for(var i = 0; i < links.length; i++)

 

if (links[i].href) addTooltipToLink(links[i]);

}

 

// Эта функция добавляет обработчики событий

 

function addTooltipToLink(link) { // Добавить обработчики событий

 

if (link.addEventListener) { // Стандартный прием link.addEventListener("mouseover", mouseover, false); link.addEventListener("mouseout", mouseout, false);

}

 

else if (link.attachEvent) { // Для IE link.attachEvent("onmouseover", mouseover); link.attachEvent("onmouseout", mouseout);

}

 

var timer; // Используется в вызовах функций setTimeout/clearTimeout

 

function mouseover(event) {

var e = event || window.event;

// Получить положение указателя мыши, преобразовать

// в координаты документа и добавить смещение

 

var x = e.clientX + Geometry.getHorizontalScroll() + 25; var y = e.clientY + Geometry.getVerticalScroll() + 15;

 

// Если запланирован вывод подсказки, отменить его if (timer) window.clearTimeout(timer);

 

// Запланировать вывод подсказки через полсекунды timer = window.setTimeout(showTooltip, 500);


 

20.3. Ajax и динамические сценарии
   

 

function showTooltip() {

// Если HTTP_ссылка указывает на тот же хост, откуда был

// загружен этот сценарий, использовать объект XMLHttpRequest

// для получения дополнительной информации.

 

if (link.protocol == "http:" && link.host == location.host) { // Выполнить запрос заголовков по ссылке HTTP.getHeaders(link.href, function(headers) {

// Собрать строку из заголовков

var tip = "URL: " + link.href + "<br>" +

 

"Тип: " + headers["Content_Type"] + "<br>" + "Размер: " + headers["Content_Length"] + "<br>" + "Дата: " + headers["Last_Modified"];

 

// И отобразить ее в виде всплывающей подсказки tooltip.show(tip, x, y);

});

 

}

else {

// Иначе, если это ссылка на другой сайт,

 

// отобразить в подсказке лишь URL_адрес ссылки tooltip.show("URL: " + link.href, x, y);

 

}

}

}

 

function mouseout(e) {

// Когда указатель мыши смещается со ссылки, отменить отображение

 

// запланированной подсказки или скрыть ее, если она уже отображается. if (timer) window.clearTimeout(timer);

 

timer = null; tooltip.hide();

 

}

}

})();

 

Одностраничные приложения

 

Под термином одностраничное приложение (single'page application) понимается именно то, что он обозначает: управляемое JavaScript_сценарием веб_приложе_ ние, которое требует загрузки единственной страницы. Некоторые одностранич_ ные приложения после загрузки вообще не взаимодействуют с сервером. Приме_ ром таких приложений могут служить DHTML_игры, где взаимодействие с поль_ зователем приводит лишь к модификации загруженного документа.

 

Объект XMLHttpRequest и архитектура Ajax открывают массу дополнительных возможностей. Веб_приложения могут использовать эти технологии для обмена данными с сервером и оставаться одностраничными приложениями. Веб_прило_ жение, разработанное в соответствии с этими положениями, может содержать небольшой объем JavaScript_кода, выполняющего начальную загрузку, и «эк_ ранную заставку» в формате HTML, которая отображается в процессе инициали_ зации приложения. После вывода экранной заставки запускающий JavaScript_ код мог бы с помощью объекта XMLHttpRequest загрузить фактический JavaScript_ код приложения, который можно было бы запустить методом eval(). Этот Java_


 

514 Глава 20. Работа с протоколом HTTP

Script_код мог бы взять на себя обязанности по загрузке требуемых данных с по_ мощью XMLHttpRequest и с использованием DHTML отобразить эти данные перед пользователем.

 



<== предыдущая лекция | следующая лекция ==>
Ограничение времени ожидания запроса | Предостережения по использованию архитектуры Ajax


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.114 сек.