Интеграция Ajax-XMLHttprequest и Perl/PHP. Часть 2.
Изложенный ниже подход позиционируется в русле 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. CGI программирование вывода в клиентскую среду.
- Часть 3. Ajax/Perl и высоконагруженные проекты. Измерение времени загрузки содержимого.
- Часть 4. Простой маршрутизатор Express/Node.js для HTML сайта.
- Прикладное программирование на Perl