xAjax – простой путь создания асинхронных веб-приложений::Журнал СА 4.2007
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6188
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6898
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4182
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2986
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3793
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3803
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6296
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3151
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3445
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7261
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10627
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12349
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13979
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9109
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7064
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5373
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4603
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3412
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3142
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3389
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3011
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 xAjax – простой путь создания асинхронных веб-приложений

Архив номеров / 2007 / Выпуск №4 (53) / xAjax – простой путь создания асинхронных веб-приложений

Рубрика: Веб /  Веб

Виктор Ермолаев

xAjax – простой путь создания асинхронных веб-приложений

Если вы в полную силу используете DHTML, но вам кажется, что даже это не обеспечивает должного уровня интерактивности, или вас смущает то, что после заполнения  формы ваша веб-страница недоступна клиенту, пока не придет ответ от сервера, – самое время начать использовать xAjax.

Ajax – мода в веб-программировании

Сейчас в Интернете все чаще и чаще появляются сайты, использующие новую технологию, называемую Ajax. Такая популярность объясняется возможностью динамического изменения контента страницы, что фактически превращает обычный браузер в среду выполнения, а гипертекстовый документ – в приложение. Такой эффект достигается за счет совместного использования DHTML (JavaScript + DOM + CSS, но третий пункт скорее опциональный) и любого из серверных языков.

Что такое xAjax

Новые веяния в программировании сопровождаются появлением новых инструментов, позволяющих облегчить труд программисту – например, IDE и библиотеки готовых функций. Прелесть таких инструментариев заключается в том, что от программиста спрятана «черная» работа, и, более того, она уже сделана за него, осталось только воспользоваться плодами. Конечно, существование таких инструментов не освобождает программиста от необходимости знать внутреннюю схему работы, и не все возможно реализовать с их помощью.

Так, для ASP недавно Microsoft выпустила дополнение к Visual Studio – Atlas, набор «компонентов», которые автоматизируют создание запросов на стороне клиента и обработку их на стороне сервера. Но поскольку Visual Studio является коммерческой средой, да и не все сайты хостятся на Windows, то определенный интерес вызывает то, что происходит в Open Source-сообществе. Здесь существует много библиотек. Сегодня речь пойдет о библиотеке xAjax (официальный сайт – www.xajaxproject.org), написанной на для серверного языка PHP.

Рассмотрим основные вехи использования этой замечательной библиотеки. Сначала необходимо загрузить библиотеку (например, здесь http://downloads.sourceforge.net/xajax/xajax_0.5_beta2.zip; конечно, лучше посетить http://community.xajaxproject.org, чтобы получить последнюю версию библиотеки).

Схема использования библиотеки очень проста – подключаете библиотеку, пишете все необходимые функции PHP и регистрируете их, а xAjax сгенерирует функции-врапперы (wrapper functions) на языке JavaScript, доступ к которым вы сможете получить уже из ваших скриптов. Чтобы ясно и кратко раскрыть смысл и технологию использования xAjax, рассмотрим пример.

Исходная ситуация – база данных, PHP, JavaScript и браузер, задача – используя xAjax, обеспечить асинхронный вывод данных из базы данных и их обновление. Задача несложная сама по себе, а уж с использованием xAjax это станет еще проще.

Как это работает...       

Условимся, что библиотека xajax (папки xajax_core и xajax_js) лежит в одном каталоге с индексным файлом. Первая часть HTML\PHP-кода страницы:

Листинг 1

01 <html>

02 <head>

03 <title>test</title>

04 <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />

05 <?php

06         $xajax->printJavascript("");

07 ?>

08 </head>

09 <script language="javascript">

10 function getData()

11 {

12  document.getElementById('data').innerHTML='Загрузка...';

13      xajax_getData(document.getElementById('xid').value);

14      return;

15 }

16 function updateData(frmid)

17 {

18      xajax_updateData(xajax.getFormValues(frmid));

19      getData();

20      return;

21 }

22 </script>

23 <body onLoad="xajax_getData(1)">

24 <div>

25 <h1>Данные</h1>

26 // Введите id //

27 <form>

28 <select id="xid" name="xid" size="1" onChange="getData();">

29  <option value="1" selected>1</option>

30  <option value="2">2</option>

31  <option value="3">3</option>

32 </select>

33 <div id="data">

34 // Загрузка... //

35 </div>

36 </div>

37 <div>

38 <h1>Редактирование</h1>

39 <form method="post" name="upForm" id="upForm" onSubmit="updateData(this.id);return false;">

41 <b>Field-1</b>&nbsp;<input name="editF1" type="text" id="editF1" />

42 <br />

43 <b>Field-2</b>&nbsp;<input name="editF2" type="text" id="editF1" />

44 <br />

45 <input type="submit" value="Обновить" />

46 </form>

47 </div>

48 <div id="done">

49 </div>

50 </body>

51 </html>

Здесь нас мало что интересует (но от гипертекстовой разметки никуда не денешься), кроме JavaScript и вставки на PHP. Начнем со второго – код на PHP (листинг 1, строки 5-7) добавляет в HTML инструкции о включении файла с JavaScript, которые сгенерировал xAjax. Такой подход весьма интересен хотя бы тем, что не загромождается код страницы, которую получит клиент. Далее описаны две функции getData() и updateData(frmid) (строки 10-21), здесь по названию понятно, за что они отвечают, но внутри этих функций происходит вызов других – тех самых , что сгенерировал xAjax, основываясь на нашем PHP-коде, который приведен в листинге 2 (к xajax.getFormValues вернемся немного позже).

Листинг 2

<?php

01 define("XAJAX_DEFAULT_CHAR_ENCODING", "windows-1251");

02 require_once("xajax_core/xajax.inc.php");

03 define("HOST","xxx.xxx.xxx");

04 define("DBNAME","xxx");

05 define("DBUSER","xxx");

06 define("DBPASS","xxx");

07 $DB = mysql_connect(HOST, DBUSER, DBPASS) or die("Could not connect : " . mysql_error());

08 mysql_select_db(DBNAME) or die("Could not select database");

09 function getData($id)

10 {

11 $query = "SELECT field1, field2 FROM mytable WHERE field1= $id";

12 $result = mysql_query($query) or die("Query failed : ". mysql_error());

13 $data = mysql_fetch_array($result, MYSQL_ASSOC);

14 mysql_free_result($result);

15 $objResponse = new xajaxResponse();            

16 $response = "<b>поле1</b> - ".$data["field1"]." <b>поле2</b> - ".$data["field2"];

17 $objResponse->assign("data","innerHTML",$response);

18 $script = "document.getElementById('editF1').value=".$data["field1"]."; document.getElementById('editF2').value='".$data["field2"]."';";

19 $objResponse->script($script);

20 return $objResponse;

21 }

22 function updateData($frmData)

23 {

24 $query = "UPDATE mytable SET field2='".$frmData["editF2"]."' WHERE field1=".$frmData["editF1"];

25 $result = mysql_query($query) or die("Query failed : ". mysql_error());

26 mysql_free_result($result);

27 }

28 $xajax = new xajax();

29 $xajax->setFlag('DecodeUTF8Input', true);

30  //$xajax->setFlag('debug', true);

31 $xajax->registerFunction("getData");

32 $xajax->registerFunction("updateData");

33 $xajax->processRequest();

34 ?>

Второй строкой идет подключение xAjax-библиотеки. Остальной код, пожалуй, стоит просматривать с конца – со строки $xajax = new xajax() (листинг 1, строка 28). Здесь мы создаем новый xAjax-объект и определяем его свойства.

Немного о кодировках

Если вы хотите работать с кодировками, отличными от UTF-8 (в xAjax пересылка данных между браузером и сервером ведется именно в таком формате), то помимо строки $xajax->setFlag('DecodeUTF8Input', true) (листинг 2, строка 29) необходимо определить константу XAJAX_DEFAULT_CHAR_ENCODING, что и было сделано в первой строке листинга 2, и, как видно, используемая кодировка – Windows-1251.

Продолжим...

Продолжим разбор листинга 2. Во время написания программы и ее отладки очень интересно знать, что же происходит в ее недрах, обмен какими данными происходит, вызов каких функций производится, а иногда необходимо знать, и сколько времени все это занимает. Разработчики xAjax позаботились об этих вещах: если раскомментировать строку «$xajax->setFlag('debug', true)» (листинг 2, строка 30), то при выполнении каждого запроса браузер откроет дочернее окно (оно будет «незапрашиваемым», и мало-мальски приличный браузер блокирует его, так что, если у вас явно указано блокировать такие окна, разрешите принимать их с вашего узла), в котором и будут отображены все интересующие сведения. Далее с помощью метода registerFunction (листинг 2, строки 31-32) регистрируются все функции, к которым можно будет обратиться из JavaScript, используя префикс xajax_ (который, кстати, можно менять... делается это следующим образом – «$xajax = new xajax("","xajax_");). Ну и наконец, $xajax->processRequest() – разрешаем xAjax обрабатывать асинхронные запросы.

Функции работы с БД я комментировать не буду. Займемся более интересным делом – рассмотрим подробнее объект $objResponse = new xajaxResponse() (листинг 2, строка 15). Это и есть тот самый рычаг, с помощью которого можно управлять внешним видом вашей страницы. В качестве примера я использовал метод assign (листинг 2, строка 17), который c параметрами получает id элемента страницы, его тег (можно даже написать style.color) и новое значение тега, и метод script (листинг 2, строка 19) – xAjax позволяет не просто обмениваться данными между клиентом и сервером, но и «действиями»! Больше информации о методах и флагах можно почерпнуть из примеров, которые идут вместе с библиотекой, и из описания класса xajaxResponse. После того как $objResponse получил все «свойства» и «методы», его можно со спокойной совестью передать клиенту.

А теперь вернемся к обещанному – xajax.getformvalues (листинг 1, строка 18). Эта функция на входе получает id формы и возвращает массив, который можно передать в PHP-функцию. Этот ассоциативный массив будет доступен на стороне сервера под именем, указанным для параметра в описании получающей функции (в примере – updateData($frmData) (листинг 2, строка 22)). Все просто, но есть две вещи, о которых не стоит забывать при обработке форм:

  • для индексов этого массива используются имена (!) полей формы, а не их id, поэтому при описании полей нужно указывать как id, так и имена (помимо этого разные браузеры по-разному обрабатывают последовательность id-name);
  • при указании реакции onSubmit (листинг 1, строка 40) необходимо писать «return false» для того, чтобы страница не перезагружалась и ей (странице) «казалось», что обработка формы отменена, в то время как JavaScript отправит асинхронный запрос.

О безопасности и совместимости

О безопасности стоит сказать одно – использование xAjax не освобождает вас от необходимости принимать те же самые меры безопасности, что вы применяете в обычных синхронных запросах (например, замена некорректных символов на escape-последовательности). Пример претендует лишь на роль учебного и не годится для использования в реальных условиях.

Совместимость библиотеки с различными браузерами напрямую зависит от того, как они поддерживают JavaScript. Разработчики обещают, что вы сможете использовать xAjax в Firefox, Mozilla (и, возможно, основанных на Mozilla браузерах), IE и Safari. От себя замечу, что библиотека прекрасно себя зарекомендовала и в Opera. А пример был протестирован в Opera 9, IE 7 и Firefox 1.5.

Выводы

Стоит заметить, что xAjax не является единственной библиотекой в своем роде (аналоги sAjax, cakePHP, при желании в любом поисковике можно найти и больше), но продуманность ее строения и большой функционал делают её не только одной из самых простых в использовании, но и одной из самых мощных.


Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru