Интеграция Ajax-XMLHttprequest и Perl/PHP. Часть 2.

Ajax в действии
Изложенный ниже подход позиционируется в русле JavaScript/CGI-программирования, представленного в первой части статьи. Особенностью настоящего раздела является использование JavaScript и объекта XMLHttpRequest на базе асинхронной технологии Ajax (Asynchronous JavaScript and XML). Строго говоря, Ajax не является технологией. Ajax объединяет в себе ряд самостоятельных технологий.

Известно, что одним из классических недостатков, при построении Web-интерфейса, является разрыв соединения между клиентом и сервером, сразу после того, как запрашиваемый клиентом ресурс загружен. Это в значительной степени диктуется природой HTTP протокола. В случае применения Ajax, веб-страница не перезагружается полностью в ответ на каждый запрос броузера, что субъективно воспринимается как ускорение работы. Посредничесто Ajax создает асинхронный режим взаимодействия между броузером и сервером, а HTTP-запросы и ответы реализуются в фоновом режиме.

В настоящей статье исследованы возможности интеграции Ajax и Perl/PHP-скриптов. Причем, CGI-сценарий выступает в роли виртуального броузера, работа которого маскируется Ajax, точно также как это происходит при взаимодействии Java и CGI (см.Java/CGI-программирование). Ниже представлены несколько примеров, иллюстрирующих интеграцию Ajax и Perl/PHP.

Тексты Perl-скриптов достаточно тривиальны и не рассматриваются. Экземпляр объекта XMLHttpRequest позаимствован из статьи D.McLellan и оформлен в виде подпрограммы loadXMLDoc(). С помощью этой функции реализуется метод GET при запросах к серверу во всех примерах. Интерес представляют интерпретации подпрограммы processReqChange(), выполняющей обработку ответа сервера с помощью свойства responseXML объекта XMLHttpRequest.

В первом примере реализован классический вариант вывода информации (котировка EURO/USD) в текстовые поля HTML-формы - теги <INPUT>. Причем, котировка EURO/USD обновляется динамически.

Во втором примере продемонстрирован вывод текстовой и графической информации в произвольные HTML-теги. Текст и графика обновляются также динамически.

В третьем примере показан вариант вывода массива текстовой информации из Базы Данных по SQL запросам.

В четвертом примере представлена реализация явного виртуального Perl-броузера, который выполняет запрос ресурса мировых новостей.

В пятом примере решается проблема с кириллицей. Отмечу, попутно, если используется PHP, то в принципе можно применить функцию iconv($INPUT_CHARSET, $OUTPUT_CHARSET, $yuor_text). Однако, невсегда версия PHP содержит данную функцию или кодировки не поддерживаются в тарифном плане, или ... ну и так далее. Поэтому, бывает проще написать свой скриптик-функцию. Скрипт должен на лету выполять преобразование символов кириллицы в специальные коды вида &...;. Основное достоинство такого подхода заключается в том, что клиенту-броузеру нет необходимости выполнять обратное преобразование. Ему и так все "понятно". Если, кому-то надо, могу выслать исходник на PHP или Perl, пишите.

Пример Шестой. Подключение метода POST. Принципиально отличий от GET не много. Изменения касаются подпрограммы из статьи D.McLellan. Скрипт (formPost()), выполняющей обработку ответа сервера, на основе свойства responseXML объекта XMLHttpRequest, практически тот же. Если используется исключительно латиница, то скрипт loadXMLDoc() дополняется следующими строками:
	req.open("POST", url, true);   
    	param="text="+message; 
	req.send(param);
и все, где "text" имя поля <textarea> POST формы, message - текс сообщения. С кириллицей, как всегда сложности. Решение состоит в преобразовании символов кириллицы в шестнадцатичеричные коды вида %xx. Подпрограмма, реализующая метод POST как для кириллицы, так и для латиницы - loadXMLDoc_2(): скачать
  1. Часть 1. CGI программирование вывода в клиентскую среду.
  2. Часть 3. Ajax/Perl и высоконагруженные проекты. Измерение времени загрузки содержимого.
  3. Часть 4. Простой маршрутизатор Express/Node.js для HTML сайта.
  4. Прикладное программирование на Perl