AJAX w aplikacji MVC


Ostatnio potrzebowałem użyć modelu AJAX w aplikacji MVC. Nie do końca byłem pewien tego, które rozwiązanie najlepiej się tu spisze, jednak pomocny okazał się Richard Thomas, który na liście mailingowej Zend Framework pokazał dość ciekawe rozwiązanie wykorzystujące bibliotekę XAJAX. Pozwoliłem sobie wykorzystać te rozwiązanie i trochę je przerobić.

Tak może wyglądać przykładowy kontroler:

<?php

class ArtykulController {

    function indexAction ()
    {
        $view = new View(); //jakaś klasa szablonów

        // [...] tu generujemy treść naszej strony 

        require_once('/sciezka/do/xajax/xajax.inc.php');

        $xajax = new xajax();
        $xajax->setRequestURI("/artykul/ajax");
        $xajax->registerFunction(array('get_test', $this, 'get_test'));

        $view->assign('head_ajax', $xajax->getJavascript('/js/xajax/'));

        echo $view->render('index.tpl');
    }

    function ajaxAction()
    {
        require_once('/sciezka/do/xajax/xajax.inc.php');
        $xajax = new xajax();
        $xajax->registerFunction(array('get_test', $this, 'get_test'));
        $xajax->processRequests();
    }

    function get_test()
    {
        $data = 'Testowe dane';

        $response = new xajaxResponse();
        $response->addAssign("test","innerHTML",$data);
        return $response->getXML();
    }

}

Akcja indexAction generuje zawartość strony na której ma być użyty AJAX. Oprócz generowania samej zawartości tworzy ona obiekt xajax, rejestruje w nim potrzebne funkcje i dołącza biliotekę xajax w sekcji <head> strony.

Akcja ajaxAction odbiera i obsługuje żądanie. W tym przypadku jedyną zarejestrowaną funkcją, której możemy użyć to funkcja get_test() zwracająca testowy napis.

W samym kodzie HTML strony możemy wywołać te żądanie wywołując funkcje xajax_nazwa_funkcji np.:

<div id="test"></div>
<input type="button" onclick="xajax_get_test();" />

W tym przypadku po wykonaniu żądania w elemencie <div> zostanie wyświetlony napis z funkcji get_test().

Rozwiązanie nie jest może idealne, ale na pewno jest wygodne, chociażby dlatego, że nie trzeba prawie w ogóle zajmować się JavaScriptem.

Informacje oraz linki


Inne artykuły
Polecane
Zend Studio - The premiere PHP IDE

Dodaj komentarz

Poświęć chwilę i wyraź swoją opinię. Możesz użyć niektórych znaczników HTML.

Komentarze czytelników

Wiem, ze to autoreklama, ale polecam zapoznac sie z tekstem http://bigweb.pl/webmaster/ajax_dla_opornych/ Jest to oczywiscie tylko taki eksperyment, ale gdyby to dopracowac to w jedyne co bys musial zrobic to dolaczyc odpowiednia bibiloteke w pliku szablonu. Zadnej pracy po stronie php, a dodatkowo odzwierciedlenie tresci strony w pasku adresu przegladarki.

Reklama reklamą, ale uważam że i tak nieskuteczna. Nie mówie, że advAjax anakina jest do niczego, wręcz przeciwnie, ta biblioteka jest naprawde bardzo dobra, kilk a razy jej używałem.

Jednak w aplikacjach MVC czyli takich zbyowanych np na ZendFramework-u użycie xajax jest duzo prostsze i przyjemniejsze.

A jeżeli w lini 1. w divie bedzie input i za pomocą onlicka bedziemy chcieli podmienic value tego inputa, to tez sobie tak ladnie poradzimy?
Powaznie pytam.

Jasne że tak, XAJAX pozwala również na podmienianie wartości DIV oraz na dodawanie do niego jakichś wartości.