Zend Framework и AJAX

В данном посте расскажу о том, как лучше и правильнее интегрировать AJAX в Zend Framework, а точнее в его MVC-компоненты. Для реализации клиентской части скрипта используется javascript библиотека json.js.

Введение

AJAX-запрос похож на обычную загрузку страницы. Те же заголовки запроса и ответа. На практике же приходится подключать дополнительно альтернативный модуль вывода данных (к примеру, чтобы возвращать данные в XML или JSON формате). Покажу на примере AJAX запроса для получения информации по навыку. Работать будем с использованием хэлпер AjaxContext, делающий нашу работу с AJAX’ом ещё удобнее и проще. Хэлпер (помощник, helper) – один из компонентов фреймворка, помогающий выполнять какие-то определённые действия. Принцип действия AjaxContext заключается в том, что он заменяет шаблон вида на нужный нам формат вывода.

Серверная часть

На сервере, собственно, необходимо пошаманить с контроллером соответствующим.

Хелпер отслеживает ajax-запросы и отключает для них авторендеринг скриптов вида. Затем, после выполнения action’а, хэлпер кодирует все данные, переданные в наш view-класс, в формат JSON и выводит на экран (т.е. передаёт браузеру). Таким образом, нам больше не нужно задумываться на стороне сервера о том, откуда поступил запрос и как его нужно обработать, это всё перекладывается на плечи разработчиков клиентской части скрипта. Теперь в случае ajax-запроса мы получим JSON-кодированные данные.

Клиентская часть

Остаётся только JS код для отправки запроса и обработки полученных результатов написать.

Zend Framework и AJAX: 4 комментария

  1. таиланд

    Извените, что пишу не по теме, но я добавил ваш сайт к себе в RSS-Reader, но новые записи, почемуто, не отображаются =(
    Это я делаю что то не так или у вас глючит rss фид?

  2. Stafox

    Кстати, в ZF есть такой метод [php]isXmlHttpRequest()[/php], который можно использовать когда есть ajax запросы. Если нам не к чему обращение к Action’y напрямую,

    public function selectskillAction() {
    if($this->_request->isXmlHttpRequest()) {
    //здесь получение ассоциотивного массива данных $res
    ...
    //возвращаем этот массив
    $this->view->s = $res;
    }
    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *