Виталий Акулов
Это два года назад AJAX был в диковинку (да и самого слова AJAX тогда ещё не выдумали). Теперь веб-приложения, страницы которых обновлялись на лету, в порядке вещей. Даже наоборот: без AJAX трудно представить себе некоторые сервисы.
Как работали обычные веб-приложения? Как правило, на событие (клик по ссылке или нажатие на кнопку) браузер реагировал отправкой запроса серверу. Когда с сервера приходил ответ, всё содержимое страницы полностью обновлялось.
Одна из проблем состояла в том, что при обновлении содержимого страницы веб-приложение переходит в новое состояние. Из информации о предыдущем состоянии сохраняются только данные, переданные в запросе. Чем более точная информация о прежнем состоянии системы требуется, тем больше данных необходимо пересылать в запросе.
Другим недостатком является необходимость пересылать повторяющиеся массивы данных клиенту после каждого события. Например, если пользователь ошибся при заполнении формы, то вместо короткого сообщения об ошибке приходится снова загружать и форму, и всю введённую ранее информации.
Современные браузеры, поддерживающие стандарты W3C DOM, позволяют вывести веб-приложение на новый уровень.
Схема взаимодействия остается почти такой же. Вот только отправляет запрос и получает ответ с сервера теперь скрипт на стороне клиента, а вместо обновления всей страницы - обновляется только ее часть (вместо обновления могут предприниматься иные действия, например, отправляться следующий запрос).
Веб-приложение получается распределенным, и часть логики находится на стороне клиента, а часть - на стороне сервера. Такие приложения и называют термином "AJAX Applications" (аббревиатура расшифровывается как Asynchronous Javascript And Xml Applications).
Подробнее про AJAX можно прочитать здесь
AJAX programming (Wikipedia)
Технология, которая перевернёт веб
Объект XMLHTTPRequest
Для асинхронных запросов от клиента к серверу на стороне браузера служит специальный объект под названием XMLHTTPRequest.
Перечислим методы и свойства объекта, которые будут использованы далее:
LHTTPRequest.open("method", "URL", async, "uname", "pswd") – создает запрос к серверу.
method – тип запроса, например, GET
URL – URL запроса, например localhost/file.xml
async – если True, то будет использоваться асинхронный запрос, то есть выполнение скрипта продолжится после отправки запроса. В противном случае скрипт будет ожидать ответа от сервера, заморозив UI.
uname, pswd – логин и пароль для простой веб-авторизации.
XMLHTTPRequest.send("content") – отправляет запрос на сервер. Значением content могут быть данные для POST-запроса или пустая строка.
XMLHTTPRequest.onreadystatechange – обработчик событий срабатывающий на каждое изменение состояния объекта. Состояния объекта могут быть следующими:
0 - до того как запрос отправлен (uninitialized)
1 - объект инициализирован (loading)
2 - получен ответ от сервера (loaded)
3 - соединение с сервером активно (interactive)
4 - объект завершил работу (complete)
XMLHTTPRequest.responseText – возвращает полученные от сервера данные в виде строки.
XMLHTTPRequest.responseXML – если ответ сервера пришел в виде правильного XML, возвращает XML DOM объект.
XMLHTTPRequest.status – возвращает статус HTTP-ответа в виде числа. Например, 404 если запрашиваемая страница не была найдена на сервере.
Рассмотрим применение объекта на примере простого AJAX-приложения.
Поле SELECT с поиском
Предположим у нас есть таблица, в которой порядка миллиона записей. Пользователю необходимо выбрать всего одну запись из таблицы (реализация отношения "один ко многим"). Выбор пользователя является всего лишь одним из этапов заполнения большой веб-формы.
Естественно, для того, чтобы пользователь мог выбрать нужную запись из миллиона, нужны какие-то средства поиска этой самой записи. Например, простой текстовый поиск по наименованию.
В традиционном веб-приложении для этой цели пришлось бы использовать отдельную страницу и сохранять остальные данные формы в сессии пользователя, либо разбивать процесс заполнения формы на несколько этапов. В AJAX-приложении дополнительная страница не нужна.
Выбор записи будет реализован с помощью двух элементов веб-формы. Первый элемент - это текстовое поле, где пользователь вводит ключевое слово. Оно отсылается на сервер, а тот возвращает только те строки из таблицы, которые удовлетворяют условию поиска. Ответ сервера (в виде списка) помещается в поле SELECT, в котором пользователь и сделает окончательный выбор. Таким образом, при отправке всей формы на сервер попадет выбранное в поле SELECT значение в виде ID записи из большой таблицы.
В HTML выглядеть это может так:
<input type="text"
onkeyup="lookup(this.value, 'id_select',
'localhost/cgi-bin/xmlhttp.cgi')" />
<select id="id_select" name="id_select">
<option selected="selected" value=""></option>
</select>
На любое событие KeyUp (отжатие кнопки) в текстовом поле вызывается функция lookup ('текст', 'id-selecta', 'url')
function lookup(text, select_id, url) {
// Получаем объект XMLHTTPRequest
if(!this.http){
this.http = get_http();
this.working = false;
}
// Запрос
if (!this.working && this.http) {
var http = this.http;
// Если в текстовом поле менее трёх
// символов – не делаем ничего
if (text.length <3 ) return;
//добавляем закодированный текст
//в URL запроса
url = url + "?text="+encodeURIComponent(text);
//создаём запрос
this.http.open("GET", url, true);
//прикрепляем к запросу функцию-обработчик
//событий
this.http.onreadystatechange = function() {
// 4 – данные готовы для обработки
if (http.readyState == 4) {
fill(select_id, http.responseText);
this.working = false;
}else{
// данные в процессе получения,
// можно повеселить пользователя
//сообщениями
// ЖДИТЕ ОТВЕТА
}
}
this.working = true;
this.http.send(null);
}
if(!this.http){
alert('Ошибка при создании XMLHTTP объекта!')
}
}
Как видно, в начале мы получаем XMLHTTP-объект с помощью функции get_http(). Затем поисковый текст кодируется в стиле URL и формируется GET-запрос к серверу. URL запроса в данном случае будет выглядеть приблизительно так: localhost/cgi-bin/xmlhttp.cgi?text=...
Скрипт на сервере, получив значение text, делает поиск в таблице и отсылает результат клиенту. В обработчике событий объекта XMLHTTP, когда данные от сервера получены и готовы к использованию, вызывается функция fill('select_id', 'data'), которая заполнит список SELECT полученными данными.
Функция get_http() – это кросс-браузерная реализация получения объекта XMLHTTP (в каждом браузере он получается по-своему). Её реализацию с комментариями вы можете легко найти в интернете, это, так сказать, пример из учебника.
function get_http(){
var xmlhttp;
/*@cc_on
@if (@_jscript_version >= 5)
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new
ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}
@else
xmlhttp = false;
@end @*/
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
try {
xmlhttp = new XMLHttpRequest();
} catch (e) {
xmlhttp = false;
}
}
return xmlhttp;
}
Функция fill() получает на вход значение параметра ID списка SELECT, который необходимо заполнить, и сами данные, полученные с сервера.
Для простоты предположим, что данные с сервера мы получаем в виде таблицы, поля которой разделены символом табуляции 't', а строки - символом переноса строки 'n':
id1 t name1 n
id2 t name2 n
...
На основании содержимого этой таблицы мы будем заполнять поле SELECT элементами OPTION.
function fill (select_id, data){
// поле SELECT в переменную в виде объекта
var select = document.getElementById(select_id);
// очищаем SELECT
select.options.length = 0;
// если данных нет – не делаем больше ничего
if(data.length == 0) return;
// в массиве arr – строки полученной таблицы
var arr = data.split('n');
// длякаждойстроки
for(var i in arr){
// в массиве val – поля полученной таблицы
val = arr[i].split('t');
// добавляем новый объект OPTION к нашему SELECT
select.options[select.options.length]=
new Option(val[1], val[0], false, false);
}
}
Готово. Теперь для любой веб-формы приложения мы можем реализовать подобный выбор значения из многомиллионного списка, который для пользователя будет выглядеть как считанные нажатия клавиш. В локальной сети выбор происходит практически мгновенно. В случае нестабильного или низкоскоростного соединения с сервером, необходимо также оповещать пользователя о том, что загрузка данных с сервера еще не завершена. Полезно предусмотреть и средства для реакции на обрыв соединения.
Другие работы по теме:
работа По дисциплине: Вычислительные машины и сети
Для алу №1 написать микропрограмму сдвига кода в Рг1 на 3 разряда влево с размещением результата сдвига в р при первом сдвиге на место освобож-дающегося разряда заносится X, при втором – 1, при третьем – ( Х – значе-ние разряда, выходящего за пределы разрядной сетки.)
Рекомендации КАК НАПИСАТЬ ДИПЛОМ? в техническом ВУЗе
КАК НАПИСАТЬ ДИПЛОМ? в техническом ВУЗе (применимо для курсовых проектов) ПРЕДИСЛОВИЕ Как написать диплом? – Этот вопрос задает себе каждый, кто, проучившись несколько лет в ВУЗе и, сдав последнюю сессию, сталкивается с необходимостью писать диплом или диссертацию. Как это делается? – спрашивает он или она своего руководителя (если он конечно есть).
Краткое содержание Пьер Менар автор Дон Кихота Хорхе Луис Борхес
Пьер Менар — это человек, решивший написать заново «Дон Кихота». Не переписать его, перевоплотившись путем глубокого проникновения в культуру XVII в. в Сервантеса, а написать его слово за словом заново с точки зрения француза XX в. Ко времени его смерти ему удается Завершить всего пару глав. Но уже сам факт существования подобной идеи необратимо трансформирует «Дон Кихота» в глазах посвященных, и рассказчик угадывает интонацию символиста М. в отдельных образах тех частей романа, которых тот не касался.
Три мушкетёра 2
Три мушкетёра Автор: Дюма А. Природа и люди Чего-то надоело про людей писать. Все про людей и про людей. Дозвольте написать о неодушевленных предметах. Для примеру – о кастрюльках.
Анализ письма Обломова
Причины, побудившие Обломова написать письмо Ольге. Каким предстает Обломов перед читателями в своем письме.
Описание внешности человека 3
Описание внешности человека Автор: Сочинения на свободную тему Я хочу написать о моем товарище Борисе, которого знаю более десяти лет. Мы с ним ходили в одну группу детского сада, а теперь учимся в одном классе.
Письмо Софье Павловне Фамусовой
Автор: Грибоедов А.С. Здравствуйте, уважаемая Софья Павловна! Прежде, чем написать Вам письмо, я долго раздумывал над этим. И окончательно сделал для себя вывод, что я должен был его написать.
Сочинение по картине Саврасова Грачи прилетели
Автор: Сочинения на свободную тему Наступила весна. Снег еще не везде сошел, но в воздухе уже носится предчувствие тепла. Вчера мы ходили в Ботанический сад, наблюдали, как просыпается природа, какие птицы первыми прилетают ранней весной из южных стран. А сегодня на уроке нам задали написать сочинение по картине Саврасова “Грачи прилетели”.
Wiki как движок обычного сайта
Не секрет, что на настоящий момент традиционные cms переживают что-то типа кризиса. Новых технологий как бы и нет, новых направлений - тоже. В основном, cms тихо совершенствуются и "наращивают мясо" функциональности.
Консольное приложение на Дельфи
Хоть и консольные приложения уже давно вышли из моды, с помощью них можно легко делать рутинные операции. Они занимают не так много места, не требовательны к ресурсам и быстро выполняются.
XMLHttpRequest (AJAX)
Объект XMLHttpRequest (AJAX): отправка и обработка ответов HTTP-запросов с помощью JavaScript. Методы и свойства объекта, общие для Internet Explorer 5, Mozilla, Netscape 7. Алгоритм выполнения, JavaScript-код. PHP-скрипт получения данных из базы.
Технология AJAX
Ajax - технология разработки Web-приложений c использованием кода на машине клиента для изменения данных на Web-сервере. Обновление Web-страницы без перезагрузки, прерывающей обмен данными. Методы и свойства объекта XMLHTTPRequest. Поле Select с поиском.
Создание приложений на AJAX
Функции технологии Ajax разработки Web-приложений: выполнение HTTP-запросов в клиентской части и анализ ответа XML-сервера. Создание данных объекта XMLHttpRequest для разных браузеров. Обработка с помощью сервлета. Функциональность задач в Ajax.
Операционные узлы ЭВМ
1. Линейные алгоритмы Составить программу вычисления объема цилиндра и конуса, которые имеют одинаковую высоту Н и одинаковый радиус основания R. 2. Ветвящиеся алгоритмы – I раздел
Пример использования MFC в Visual C
В этой статье будет показано как включить потдержку MFC в Visual C++ на примере двух типов приложений: 1. Консольное приложение 2. Приложение типа Windows Application
ASP.NET Atlas AJAX в исполнении Microsoft
"ASP.NET Atlas" – AJAX в исполнении Microsoft Игорь Тамащук Введение Словосочетание "Web 2.0" знакомо сейчас, пожалуй, всем, кто более или менее внимательно следит за развитием Internet-а. И всем, наверное, знаком термин AJAX, который используется в этой концепции. В своей статье я расскажу о проекте Atlas – фреймворке для разработки AJAX web-приложений, который предлагает компания Microsoft разработчикам на ASP.NET.
Sophocles 3
Sophocles (pronounced /ˈsɒfəkliːz/ in English; Greek: Σοφοκλῆς, Sophoklēs, probably pronounced [sopʰoklɛ̂ːs]; c. 497/6 BC – winter 406/5 BC)[1] was the second of the three ancient Greek tragedians whose work has survived.
Toni Morrison And Sula Essay Research Paper
Toni Morrison is one of the most prolific authors of African American women novelist. She mostly focuses on issue of gender and community as in the story of Sula. Her contributions to African American literature are awarded many times in twentieth century.
Effect Of Acids And Bases Essay Research
Paper Experiments to Determine the Effect of Acids & Bases on Different Indicators and the pH of Common Cleaning Agents The aim of the first set of experiments is to find out and record the colour changes that are observed after a certain indicator is mixed with acids and bases to form a colour reaction. Once the selected indicator has been mixed with a acid that is both weak and strong and a base/alkali that is both weak and strong we are to record the colour and choose another indicator.
Friendships In Sula Essay Research Paper Confusing
Friendships In Sula Essay, Research Paper Confusing friendships and twisted love triangles is one of the themes in the book Sula by Toni Morrison. Sula and Nel had a very complex relationship, but in the end they both realized how precious friendship was to them and they overcame their differences.
Sula As A Defiant Selfexile Essay Research
Paper Sula in Tony Morrison’s Sula as a Defiant Self-Exile Morrison’s Sula, features a protagonist who shares her name with the book who has the decided attitude not to form social bonds in the Bottom, a black district inside, Medallion. Sectioned into two parts, the book divides between Sula Peace’s coming-of-age experience before she leaves the Bottom and her return to the Bottom as a mature woman.
Exploring The Novel Sula By Toni Morrison
Essay, Research Paper A Strong Woman is Outcast Melody Carter Women in 20th Cen. Lit. Prof. Fiona Paton Paper 2- Nov 10, 2000 In the novel Sula, by Toni Morrison we follow the life of Sula Peace through out her childhood in the twenties until her death in 1941. The novel surrounds the black community in Medallion, specifically “the bottom”.
Iliad By Homer Essay Research Paper The
Iliad By Homer Essay, Research Paper The essay of Iliad, Homer finds a great tool in the simile. Just by opening the book in a random place the reader is undoubtedly faced with one, or within a few pages. Homer seems to use everyday activities, at least for the audience, his fellow Greeks, in these similes nearly exclusively.
Greek Vase Painting Essay Research Paper Greek
Greek Vase Painting Essay, Research Paper Greek Vase Painting Greek vase painting is a very important part of Greek history. Greek vases provide us with important stories and information about ancient Greek life and mythology. This is acheaved through painted scenes on fired clay. These vases give us an idea of what life might have been like for ancient Greeks.
Sophocles Essay Research Paper Sophocles was born
Sophocles Essay, Research Paper Sophocles was born in Colonus, near Athens, c.497 B.C. Sophocles father was a wealthy armorer named Sophillus. When he reached adulthood he was already established as a great tragic playwright, and the citizens of Athens loved him. He was nicknamed Attic-bee by the Athenians because he could take pure honey from words.
Homers Ajax Essay Research Paper The relevance
Homer`s Ajax Essay, Research Paper The relevance that the themes of tragedy could have to issues affecting the city-state even in plays whose plots had ostensibly nothing to do with life in a
Тесты по бухгалтерскому учёту
Тесты. Лимит по МБП: 100 МРОТ 50 МРОТ 50 или 100 МРОТ в зависимости от формы собственности Написать хозяйственную операцию, соответствующую корреспонденции Д10 – К60. - Поступили материалы на склад от поставщиков
Тесты по бухгалтерскому учёту
Тесты. Лимит по МБП: 100 МРОТ 50 МРОТ 50 или 100 МРОТ в зависимости от формы собственности Написать хозяйственную операцию, соответствующую корреспонденции Д10 – К60. -