]]>
ваш баннер
]]>

Web разработка. Ajax без JavaScript?

4 декабря, 2007

картинка xajax
Можно ли написать web приложение, использующее Ajax, без JavaScript? Правильный ответ: “Нельзя. Потому что сама технология ajax основана на запросах, которые отправляются с помощью JavaScript”. Но, кто сказал, что мы должны писать JavaScript код сами? Похоже, разработчики библиотеки xajax думали именно так.

Прежде всего, разберем, что представляет собой xajax. Это PHP библиотека, предназначенная для упрощения работы с ajax. Принцип работы заключается в том, что JavaScript код генерируется автоматически, а вы с помощью php функций указываете, где его разместить.

Теперь рассмотрим небольшой пример. Создадим форму, содержащую текстовое поле для ввода имени, и с помощью xajax добавим проверку количества символов в нем. Естественно, проверка должна выполняться после каждого изменения в поле.

В первую очередь качаем библиотеку с официального сайта. И распаковываем архив.

Примечание. Библиотека может быть размещена где угодно. Главное, что бы вы могли подключить файл xajax.inc.php к вашему проекту. Подробнее о подключении библиотек можно почитать в статье “Установка дополнительных библиотек PHP“. Я сделал внутри проекта отдельную папку xajax и распаковал библиотеку в нее.

Добавляем форму на страницу:

Code (html4strict)
  1. <form action="#" id="testform" method="post">
  2. <p>Введите имя (от 3 до 15 символов)</p>
  3. <input type="text" name="username" size="15" id="username"
  4. onKeyUp="xajax_checkInput(document.getElementById(’username’).value);" />
  5. <span id="message"></span>
  6. </p>
  7. </form>

Форма содержит одно текстовое поле, в обработчике события onKeyUp которого, выполняется вызов функции xajax_checkInput. Об этой функции немного ниже, а сейчас обратите внимание, на тег <span id="message"> (строка 7). В него будет вставлен результат проверки.

Теперь подключаем библиотеку и создаем объект xajax.

Code (php)
  1. require_once("xajax/xajax.inc.php");
  2. $objXajax = new xajax();

После этого регистрируем функцию, выполняющую проверку имени (checkInput) и вызываем метод processRequest(), который дает возможность xajax обрабатывать запросы. Обратите внимание, что мы регистрируем функцию checkInput, но в обработчике события onKeyUp добавляем к ее названию приставку xajax_.

Code (php)
  1. $objXajax->registerFunction("checkInput");
  2. $objXajax->processRequest();

Внимание: метод processRequest() должен быть вызван до того, как сервер начнет отправлять страницу браузеру, т.е. лучше всего вызвать этот метод в самом начале страницы.

Вставляем JavaScript код. Для этого в заголовок страницы (между тегами <head> и </head>) добавляем следующий код:

Code (php)
  1. $objXajax->printJavascript("xajax/");

В качестве параметра методу printJavascript передается путь к библиотеке.

Осталось написать функцию checkInput.

Code (php)
  1. function checkInput($val) {
  2.     if (isset($val) && (mb_strlen($val, ‘UTF-8′) >= 3)
  3.          && (mb_strlen($val, ‘UTF-8′) <= 15)) {
  4.         $res = "<span style=\"color:green\">Правильно</span>";
  5.     }
  6.     else {
  7.         $res = "<span style=\"color:red\">Ошибка</span>";
  8.     }
  9.     $objResponse = new xajaxResponse();
  10.     $objResponse->assign("message", "innerHTML", $res);
  11.     return $objResponse;
  12. }

В строках 2-7 мы определили количество символов в имени и сформировали строку с ответом. Если в имени от 3-х до 15-ти символов, то выводим слово «Правильно» зеленого цвета, если нет – «Ошибка» красного.

Затем создаем объект xajaxResponse, который содержит ответ сервера, и вызываем его метод assign. Этот метод присваивает нашу строку ($res) параметру innerHTML тега, у которого id=”message”. Другими словами, это означает, что наша строка с результатами будет вставлена между тегами <span id="message"></span>.

Теперь посмотрите на весь код целиком.

Code (php)
  1. <?php
  2. require_once("xajax/xajax.inc.php");
  3.  
  4. $objXajax = new xajax();
  5. $objXajax->registerFunction("checkInput");
  6. $objXajax->processRequest();
  7.  
  8. function checkInput($val) {
  9.     if (isset($val) && (mb_strlen($val, ‘UTF-8′) >= 3)
  10.          && (mb_strlen($val, ‘UTF-8′) <= 15)) {
  11.         $res = "<span style=\"color:green\">Правильно</span>";
  12.     }
  13.     else {
  14.         $res = "<span style=\"color:red\">Ошибка</span>";
  15.     }
  16.     $objResponse = new xajaxResponse();
  17.     $objResponse->assign("message", "innerHTML", $res);
  18.     return $objResponse;
  19. }
  20. ?>
  21.  
  22. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  23. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  24.  
  25. <html xmlns="http://www.w3.org/1999/xhtml" lang="ru">
  26. <head>
  27. <title>Проверка введенных значений (XAjax)</title>
  28. <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
  29. <link rel="stylesheet" type="text/css" href="checkinput.css" />
  30. <?php $objXajax->printJavascript("xajax/"); ?>
  31. </head>
  32.  
  33. <body>
  34. <form action="#" id="testform" method="post">
  35. <p>Введите имя (от 3 до 15 символов)</p>
  36. <p>
  37. <input type="text" name="username" size="15" id="username"
  38.     onKeyUp="xajax_checkInput(document.getElementById(’username’).value);" />
  39. <span id="message"></span>
  40. </p>
  41. </form>
  42.  
  43. </body>
  44. </html>

Как видите, мы использовали JavaScript всего один раз. Только для того чтобы получить значение, введенное пользователем. Это, безусловно, основное преимущество данной библиотеки.

Результаты работы приложения показаны на скриншотах.

Скриншот приложения xajax (ошибка)

Скриншот приложения xajax (правильно)

Вы можете скачать архив с этим приложением.

Вместо заключения
У меня сложилось двоякое впечатление о xajax. С одной стороны минимум JavaScript, что очень хорошо.
Но с другой – существуют JavaScript библиотеки, например, prototype, которые позволяют отправить ajax запрос буквально с помощью пары строк кода. К тому же, xajax ориентирован на работу с ajax запросами, а не с JavaScript вообще.

Поэтому, я думаю, использовать xajax имеет смысл, только если нужна исключительно поддержка ajax. Как только появится необходимость использовать JavaScript для чего-нибудь еще (перемещение элементов страницы, различные эффекты и т.п.), то лучше воспользоваться библиотеками вроде prototype и scriptaculous.

Понравилась статья? Подпишитесь на продолжение rss link !

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в Ajax, JavaScript, PHP

]]>

Комментарии (6)

Вы можете отслеживать обсуждение записи с помощью RSS 2.0 rss link

Вы также можете оставить комментарий, или трекбек с Вашего сайта.

  1. larin 07.12.2007 в 13:10 (Ответить)

    Ajax без JavaScript не возможен по определению )))

    Что касается Xajax, то пару лет назад я им пользовался и счиатл, что он упрощает работу. Но тогда я просто не умел нормально писать на JS. =)

    Сейчас же я говорю всем желающим попробовать Xajax - и близко к нему не подходите, это неповоротливый монстр. Или как многие его называют - “костыль”. Лучше подучите JS и все будет хорошо.

    Сейчас для AJAX использую JsHttpRequest Дмитрия Котерова. По мне, это самая удобная библиотека, замечательно показавшая себя на многих моих проектах.

    И еще раз: забудьте о существовании Xajax! =))) И учите JS - пригодится ))))

  2. Владимир 07.12.2007 в 21:01 (Ответить)

    В принципе, в отношении Xajax я согласен.
    Библиотеку вроде Prototype (или чистый JS) все равно ранно или поздно придется изучать :-) .

    Но вот JsHttpRequest я не понял. Их примеры работа с Ajax практически повторяют Prototype. По-моему, для использования библиотеки, должна быть веская причина. Например, существенное сокращение количества кода.

  3. larin 09.12.2007 в 13:19 (Ответить)

    @Владимир
    А вы внимательно посмотрите ее возможности =) В способе передачи данных различными вариантами… и все поймете.

    Так же посмотрите сокращенные вызовы… в общем мне эта библиотека нравиться.

  4. Владимир 09.12.2007 в 20:32 (Ответить)

    Посмотрел…

    Действительно, есть много полезного.

    Сократить количество кода, судя по всему, нельзя. Но вот кэширование - это уже интересно. Да и перехват ошибок PHP тоже может пригодится.
    А вот формат передачи данных очень похож на JSON. Это, конечно, хорошо, но лучше было бы использовать сам JSON.

    Самое главное преимущество по сравнению с Prototype, которое я нашел, это размер кода.

    В общем, интересная библиотека. Спасибо. Попробуем.

  5. larin 09.12.2007 в 21:03 (Ответить)

    @Владимир
    Вот видите :)
    А формат передачи данных очень хорош. Быстро привыкаешь, а главное если передавать только “чистые данные”, а HTML формировать уже на клиенте при помощи JS, то результат по скорости работы AJAX-модулей превзойдет все ваши ожидания. Это вам не XAjax ))))

    XAjax - уже в названии, для русского человека, видно, что это Х аякс ))))

  6. batia 18.01.2008 в 12:41 (Ответить)

    я тоже использую библиотеку Дмитрия Котерова - и меня все устраивает - полностью кросс браузерно и вообще грамотно сделано.

Оставить комментарий

Введите ваш комментарий

* - обязательные для заполнения поля

Quicktags:

]]>