Рыская в интернете в поисках Ajax-готового новостного движка, я наткнулся на
давно всем известный . Хотя этот довольно продвинутый php ресурс и содержит
элементы Ajax, они по-моему не до конца раскрыты и используются довольно скупо.
К сожалению, в самой документации движка ничего не поведано на тему как же
использовать Ajax и создавать свои собственные модули. Придется эту
заколдованную часть раскапывать самому. Тем, кто столкнулся с подобной
проблемой, будет безинтересным узнать некоторые подробности , который довольно
идентичен Ajax-движку . В качестве прмера используется обыкновенный
авторизационный модуль.
SACK можно назвать одним из самых простых и нетребовательных к броузеру Ajax
движков, который не требует особых знаний JavaScript или PHP. Особенно для
начинающих строителей веб портала SACK позволит завершить проект в самое
короткое время. SACK 1.2 включен в блоговый сайт , что придает движку довольно значимый авторитет.
SACK разработан .
Простой JavaScript пример запроса
1. Создаем наш пользовательский JavaScript файл test.js, в котором
описывам следующие функции:
• whenLoading() – информируем пользователя о том, что создается SACK и
готовятся данные к отправке.
• whenLoaded() – информируем пользователя о том, что послан запрос к
серверу и данные отправлены.
• whenInteractive() – пока ожидаем ответ от сервера, то можем показать
какую-нибудт движущуюся картинку или прогресс бар.
• whenCompleted() - обрабатываем полученные данные и показываем
результат.
• doit() – этот код непосредственно создает SACK и устанавливает
параметры запроса.
Первая строка var ajax = new sack(); создает копию SACK объекта.
// незабудьте заменить первую строку, если хотите применить этот код в DataLife на эту:
ajax.AjaxFailedAlert = "Включите JavaScript, или используйте иной броузер";
ajax.setVar("login_name", form.user.value);
ajax.setVar("login_password", form.pass.value);
ajax.requestFile = "login.php";
ajax.method = "POST";
ajax.element = 'replaceme';
ajax.onLoading = whenLoading;
ajax.onLoaded = whenLoaded;
ajax.onInteractive = whenInteractive;
ajax.onError = whenError;
ajax.onCompletion = whenCompleted;
ajax.runAJAX();
// незабудьте заменить первую строку, если хотите применить этот код в DataLife на эту:
//ajax.sendAJAX();
}
В движке DataLife необходимо заменить некоторые переменные и методы на
аналогичные (только с другим названием):
#1. var ajax = new sack(); Заменить на var ajax = new dle_ajax();
#49. ajax.runAJAX(); Заменить на ajax.sendAJAX
Рассмотрим функцию doit() более подробно:
• ajax.AjaxFailedAlert = string; - Содержит текст сообщения,
которое будет показано пользователю, если его броузер не поддерживает
XMLHttpRequest. Если необходимо отключить вывод такого сообщения, посто укажите
null. Переменую нет необходимости указывать – содержится сообщение по
умолчанию.
• ajax.setVar (stringname, stringvalue); –
позволяет добавить переменную, которая будет добавлена в URLString запрос в виде
пары &name=value. В нашем примере мы добавляем имя myTextBox, которое будет
содержать данные из текстового поля формы. Данные не будут кодироваться в этой
функции. Если необходимо закодировать данные в Unicode, то используйте
аналогичную функцию encVar (stringname, string
value).
• ajax.requestFile = string; - переменная, которая содержит имя
файла, куда будет отправлятся запрос. В нашем случае мы будем отправлять запрос
в login.php.
• ajax.method = string; - любой доступный HTTP метод. Наиболее
распространенные методы: POST - если посылаются на сервер данные для
обработки или GET – если получаем от сервера информацию без
предварительной отправки данных запроса.
• ajax.element = string; - Элемент страницы, который будет замещен
текстом, полученным от сервера после запроса.
• ajax.onLoading = function; - указывает на JavaScript функцию,
которая запускается в момент инициализации SACK.
• ajax.onLoaded = function; - указывает на JavaScript функцию,
которая запускается после того, как SACK закончил инициализацию.
• ajax.onInteractive = function; - указывает на JavaScript
функцию, которая запускается после того, как данные отправлены на сервер и
ожидается получение результата.
• ajax.onCompletion = function; - указывает на JavaScript функцию,
которая запускается после того, как получен ответ с результатами обработки
запроса.
• ajax.onError = function; - указывает на JavaScript функцию,
которая запускается, если получен ответ сервера с ошибкой или с иным кодом шапки
нежели HEADER 200 OK. Иногда в целях конспирации полезно отправлять не
200 код (обычный код любой веб страницы), а код переадресации 3хх, 404 –
страница не найдена, или 5хх – gateway error... Соответствующий код можно
обработать в этой функции.
• ajax.encodeURIString = boolean; Переменная по умолчанию
установлена в true. Кода переменная уснановлена в false, то
посылаемые данные должны содержать только ASCII код или должны быть
предварительно обработаны (например, если мы хотим убрать ненужный код из
посылаемый на сервер данных – полезно при защите от хакерюг).
• ajax.execute = boolean;
• ajax.runAJAX (stringURLString) – наконец-то, запускаем
SACK и все, что создали - отправляем на сервер. В переменную urlstring
можно пенредать данные в виде имя=данные&имя=данные, но желательно для
этих целей применять вышеуказанный метод setVar(), тогда URLString можно
не указывать. Класс SACK (или dle_ajax для DataLife) заполняется
соответствующими данными (response, responseXML, responseStatus, и так далее –
см. ниже). В движке Datalife аналогичная функция называется ajax.sendAJAX
(stringURLString)
2. Создаем HTML демо страницу, в которую вставляем наш файл test.js между
тегами <HEAD>. Необходимо также добавить tw-sack.js – файл самого
движка SACK.
Чтобы подключить наш скрипт в движке DataLife необходимо вставить строку в
переменную $ajax в файле index.php Незабудьте поставить DataLife
тег {AJAX} в конце страницы перед </BODY>.
Для того, чтобы авторизовать пользователя необходимо отправить POST запрос со
следующими полями:
• login_name=текстовое поле с именем пользователя
• login_password=текстовое поле с паролем
• action=login – закрытые даные формы
• login=submit - закрытые даные формы
Для проверки данных вставляем в функцию doit()следующие определения:
...
//это специфические поля, используемые DataLife для авторизации пользователя
ajax.onShow ("Проверяем Ваш логин и пароль");
ajax.setVar("login_name", form.user.value);
ajax.setVar("login_password", form.pass.value);
ajax.setVar("action", "login");
ajax.setVar("login", "submit");
ajax.execute=true;
// не указывайте переменную ajax.element
// иначе JavaScript будет показываться пользователям
…
}
Добавили дополнительные переменную и метод:
• ajax.execute = bool; - По умолчанию установлено false.
Если переменную установить в true, то возвращенный ответ сервера будет
расцениваться как JavaScript, а не как простой текст. По окончении обработки
запроса будет вызвана функция runResponse, которая и запустит наш
JavaScript.
• ajax.onShow(string); - Этот метод существует только в DataLife и
указанный текст будет выводится в блоке, который появляется во время работы Ajax.
Хотите, чтобы этот прямоугольник не показывался при работе ajax –
закомментируйте эту строку или вообще уберите.
Пишем login.php, где обрабатываем отправленные данные
Дополнительные переменные, которые возвращаются вместе с ответом сервера:
• ajax.responseStatus (Array) – Массив, который возвращает header
статус: индекс [0] - указывает на номерной код заголовка (например, 200 – при
удачном соединении), а индекс [1] - возвращает текствое описание статуса
• ajax.failed (Boolean) – Позволяет определить, поддерживает ли
броузер XMLHttpRequest (true) или не поддерживает (false).
• ajax.response (String) – Текст, полученный от сервера.
• ajax.responseXML (String) – Ответ вервера в форме xml.
• ajax.vars (Array) – Содержит данные, которые отправлены серверу
через URLString в форме name/value, при этом массив строится в форме {['name']
=> 'value'}. Так же содержит статус закодированных данных.
Также можно использовать дополнительные методы:
• sack (stringfile) – инициализирует SACK. Необязательный
метод, который указывает путь и имя файла, доступ к которому будет осуществлен
через XMLHttpRequest и содержание файла будет отправлено в переменную
requestFile.
• createAJAX() - Метод-конструктор данных SACK, который инициализирует
объект XMLHttpRequest для совместимости с различными броузерами. Если не
поддердивается, то переменная failed выставляется в true.
• processURLString (stringstring, booleanencode);
- разбивает сформатированную строку URLString и отправляет данные в форме
name=value в различные функции. Установка encode в true указывает
на то, должны ли данные кодироваться
• createURLString (stringURLstring) – Создает корректно
сформатированную переменную URLString из любй существующей или переданной
строки.
• resetData – Обнуляет все данные, возвращет установки по умолчанию.
• resetFunctions – Обнуляет функции onEvent, возвращет установки по
умолчанию.
• reset() - Запускает resetData и resetFunctions, обнуляя все даные до
изначально установленного объекта ajax.
Возможно, существуют и другие неведомые переменные и функции в движке DataLife,
которые, как мы надеемся, когда-нибудь станут явью.