Большинство современных веб-приложений активно использует механизм AJAX. В системном классе фреймворка waRequest
есть метод isXMLHttpRequest()
, определяющий, получен ли запрос от AJAX-приложения:
waRequest::isXMLHttpRequest() //возвращает true для AJAX-запросов, в противном случае — false
Иногда формирование содержимого страницы в браузере выполняется только средствами JavaScript. В этом случае с сервера снимается задача генерации HTML-кода с использованием шаблона, а реализация слоя «вид» в терминологии MVC перемещается на клиента. При этом вместо формирования HTML-кода перед сервером встаёт другая задача — передача данных клиенту. Во фреймворке в качестве удобного формата передачи данных для обработки JavaScript-кодом используется JSON.
Для упрощения передачи данных в браузер в виде структур JSON во фреймворке реализованы базовые классы waJsonActions
,
и waJsonController
. Когда необходимо передать в браузер данные в формате JSON вместо HTML-кода, необходимо
создать класс экшена или контроллера, унаследованный от одного из этих базовых классов.
Названия методов, реализующих логику обработки запроса, должны подчиняться тем же правилам, что и
названия методов для экшенов и контроллеров, наследуемых от классов waViewActions
и waViewController
.
PHP-массив данных, помещенный в поле контроллера response
, автоматически конвертируется в JSON-структуру и
передаётся в браузер, например:
<?php class someAppAjaxActions extends waJsonActions { ... function testAction() { ... $this->response = array( 'valA' => 'value first', 'valB' => 'velue second', ); } }
Результатом выполнения вышеприведенного экшена будет JSON-массив:
{ "status":"ok", "data":{ "valA":"value first", "valB":"velue second" } }
Простой пример вызова такого экшена из JavaScript:
$.getJSON('?module=ajax&action=test', function (json) { alert(json.data.valA); });