AJAX

Содержание...

Большинство современных веб-приложений активно использует механизм AJAX. В системном классе фреймворка waRequest есть метод isXMLHttpRequest(), определяющий, получен ли запрос с использованием AJAX:

//возвращает true для AJAX-запросов, в противном случае — false
waRequest::isXMLHttpRequest();

Иногда формирование содержимого страницы в браузере выполняется только средствами 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 = [
            'valA' => 'first value',
            'valB' => 'second value',
        ];
    }
}

Результатом выполнения этого экшена будет JSON-объект:

{
    "status":"ok",
    "data":{
        "valA":"first value",
        "valB":"second value",
    }
}

Простой пример вызова такого экшена из JavaScript:

$.getJSON('?module=ajax&action=test', function (json) {
    console.log(json.data.valA);
});