Fluke
19.06.2013, 07:25:30
Witam,
Zastanawiam się jak najlepiej jest skonstruować akcje w kontrolerze, żeby móc odbierać żądania i wysyłać odpowiednie dane z powrotem. Wiem że w metodzie init trzeba zainicjować helpera "AjaxContext", chodzi mi głównie o samą akcję.
Czy robicie na zasadzie takiej jak zwykła akcja, która pobiera dane z modelu, coś jeszcze przetwarza, ładuje widok i wysyła z powrotem. Czy może wszystko tak jak wcześniej ale wysyłacie to w postaci JSON(nie może renderować widoku ale może być przypisany do zmiennej np: $this->view->xhtml = $view->render('index.phtml')).
W 2 przypadku można dodatkowo przekazać pewne zmienne. W pierwszym, jak rzucę wyjątkiem to za pomocą jQuery nie mam jak sobie z tym poradzić i pięknie mi się wyświetla stack.
Dziękuję i pozdrawiam.
basso
19.06.2013, 09:14:36
Ja robię tak jeśli interesuje mnie zwrotka akcji:
Wyłączam layout w akcji:
$this -> _helper->layout()->disableLayout();
Wtedy mam czyściusieńki wynik samej akcji. Zazwyczaj mi to wystarcza.
Jeśli mam przekazać zmienne zwracam je przez tablice JSON.
Dane z żądania są odbierane identycznie jak ze zwykłego wywołania.
Ja nie inicjuje żadnego AjaxContext.
Fluke
19.06.2013, 11:31:16
No a ja właśnie inicjuje "AjaxContext" z tego względu, że chciałbym mieć wybór do html, czy JSON.
Nie chcę powielać 2x tej samej akcji tylko z tą różnicą, że jedna ma zwracać JSON a druga widok.
Nie mam pomysłu jak ten problem rozwiązać.
basso
19.06.2013, 19:17:02
No to sprawdzasz czy jest xmlhttprequest (if( $_SERVER ['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest')) czy nie i po problemie.
Przecież tak czy siak musisz to sprawdzić aby ktoś sobie przez url nie wszedł z okna przeglądarki.
I w jednym przypadku dajesz $this -> _helper->layout()->disableLayout(); i jedziesz z JSON

a w drugim ładujesz widok.
ShadowD
19.06.2013, 21:01:11
Normalna akcja i w niej: $request->isXmlHttpRequest()
Jeśli true to jest ajax i dajesz noRender dla layoutu, następnie robisz co chcesz albo json albo html zwracasz, jeśli false piszesz wszystko tak jak by ajaxa wogóle nie było.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.