В данном посте расскажу о том, как лучше и правильнее интегрировать AJAX в Zend Framework, а точнее в его MVC-компоненты. Для реализации клиентской части скрипта используется javascript библиотека json.js.
Введение
AJAX-запрос похож на обычную загрузку страницы. Те же заголовки запроса и ответа. На практике же приходится подключать дополнительно альтернативный модуль вывода данных (к примеру, чтобы возвращать данные в XML или JSON формате). Покажу на примере AJAX запроса для получения информации по навыку. Работать будем с использованием хэлпер AjaxContext, делающий нашу работу с AJAX’ом ещё удобнее и проще. Хэлпер (помощник, helper) – один из компонентов фреймворка, помогающий выполнять какие-то определённые действия. Принцип действия AjaxContext заключается в том, что он заменяет шаблон вида на нужный нам формат вывода.
Серверная часть
12345678910111213141516171819
class AjaxController extends Zend_Controller_Action{ public function init() { //передаём имя action'а, который необходимо интегрировать с AJAX'ом$this->_helper->AjaxContext()->addActionContext ('selectskill', 'json')->initContext('json'); } //обработка AJAX запроса на получение информации по навыку public function selectskillAction() { //здесь получение ассоциотивного массива данных $res ... //возвращаем этот массив $this->view->s = $res; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
class AjaxController extends Zend_Controller_Action { public function init() { //передаём имя action'а, который необходимо интегрировать с AJAX'ом $this->_helper->AjaxContext()->addActionContext ('selectskill', 'json')->initContext('json'); } //обработка AJAX запроса на получение информации по навыку public function selectskillAction() { //здесь получение ассоциотивного массива данных $res ... //возвращаем этот массив $this->view->s = $res; } } |
На сервере, собственно, необходимо пошаманить с контроллером соответствующим.
Хелпер отслеживает ajax-запросы и отключает для них авторендеринг скриптов вида. Затем, после выполнения action’а, хэлпер кодирует все данные, переданные в наш view-класс, в формат JSON и выводит на экран (т.е. передаёт браузеру). Таким образом, нам больше не нужно задумываться на стороне сервера о том, откуда поступил запрос и как его нужно обработать, это всё перекладывается на плечи разработчиков клиентской части скрипта. Теперь в случае ajax-запроса мы получим JSON-кодированные данные.
Клиентская часть
Остаётся только JS код для отправки запроса и обработки полученных результатов написать.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//Функция получения инфы по навыку function GetSkillById(id, obj) { if(list_ajax['skill_'+id] == null) { //формируем запрос $.getJSON ( base +'ajax/skill', {skillid:id}, function(results) { //обработка результата //в results.s возвращённый массив if(results.s[0] == 'success') { ... } else ... } ); } else { ... } } |