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.



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.