Aktuálně: Postihly zákazy tvou profesi? Poptávka po ajťácích prudce roste, využij slevové akce 80% výuky zdarma!
Pouze tento týden sleva až 80 % na e-learning týkající se Pythonu
birthday
Avatar
FiftypiSoftware
Super redaktor
Avatar
FiftypiSoftware:6. března 17:11

Ahoj, mám dotaz, snad se mi to podaří dobře zformulovat. Mám web postavený na MVC architektuře a potřebuji zobrazovat komentáře. K vypisování komentářů používám AJAX a web na MVC mám postavený podle zdejšího tutoriálu.

Komentáře jsou uloženy v databázi a při načítání stránky se provede požadavek na vypsání komentářů AJAXem. Volá se kontroler comments s parametrem url. Tento parametr je zpracován modelem, a poté kontrolerem zpracován pohled. Na stránku se skutečně vypíší komentáře, ale problém je ten, že potřebuji, aby se zobrazila pouze adekvátní část, avšak v konzoli vidím, že se vypíše úplně celá stránka, což je špatně.

Také jsem si myslel, že změny provedené v odpovědi AJAXu se projeví i ve zdrojovém kódu (když si jej dám zobrazit, elementy, které Javascript upravuje se nezobrazí.)

Další dotazy budou průběžně přidávány.

 
Odpovědět
6. března 17:11
Avatar
Petr Štechmüller
Překladatel
Avatar
Odpovídá na FiftypiSoftware
Petr Štechmüller:7. března 9:25

Ahoj, zkusím tvůj problém přeložit:

Máš web postavený podle zdejší MVC architektury.
Dále máš stránku, na které potřebuješ zobrazit komentáře.

Komentáře jsou uloženy v databázi a při načítání stránky se provede požadavek na vypsání komentářů AJAXem

Z této věty chápu, že ty zobrazíš "prázdnou" stránku bez komentářů a asynchronně po načtení základního layoutu strákny si vyžádáš obsah komentářů. Jenže ti to asynchronní volání vrátí kompletní obsah stránky a ne pouze tu část s komentáři.

Upřímně, na takové věci není tato MVC architektura uzpůsobena. Tedy, možná je, ale vidím pouze obsah základního kurzu. K ostatním článkům nemám přístup, tak nevím, jestli je to dál nějak vylepšeno.

To, co bys mohl potřebovat je vlastně nějaký REST přístup k tvému serveru. To by znamenalo, že tím asynchronním voláním by sis nevrátil obsah celé stránky, ale pouze JSON s komentářy. Samotné renderování by proběhlo až na klientovi.

Nebo udělat renderování na serveru - což je nejspíš to, o co se teď snažíš. Budeš na to potřebovat ale napsat nějakou logiku.

Takže by to chtělo rozlišit standardní požadavek na stránku od RESTu. A na základě tohoto rozhodnutí bys renderoval celou stránku, nebo jenom její část - komentáře.

Nahoru Odpovědět
7. března 9:25
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
FiftypiSoftware
Super redaktor
Avatar
Odpovídá na Petr Štechmüller
FiftypiSoftware:7. března 11:03

Ahoj, ano, web mám postavený podle zdejší MVC architektury

Z této věty chápu, že ty zobrazíš "prázdnou" stránku bez komentářů a asynchronně po načtení základního layoutu strákny si vyžádáš obsah komentářů. Jenže ti to asynchronní volání vrátí kompletní obsah stránky a ne pouze tu část s komentáři.

Ano, je tomu tak. Upřímně, použít pro komentáře pouze JSON, mě nenapadlo, ale asi to bude nejjednodušší.

Zatím jsem to vyřešil tak, že mám kontroléry, které zpracovávají a renderují AJAX požadavky, a router, který na základě podmínky buď vypíše celý layout nebo vypíše pouze pohled komentářů.

$this->control->proceed($parsed);

if(preg_match('/Ajax$/',$control_class))
{
        $this->data = $this->control->data;
        $this->view = $this->control->view;
}
else
{
        $this->data['title'] = $this->control->header['title'];
        $this->data['keywords'] = $this->control->header['keywords'];
        $this->data['describtion'] = $this->control->header['describtion'];
        $this->data['user'] = $user;
        $this->data['msgs'] = $this->getMessages();

        $this->view = 'template';
}

Tady je ukázka fragmentu kódu routeru, který vyhodnocuje, zda se jedná o požadavek či nikoliv. Je to asi krkolomně řešeno, protože název kontroléru musí obsahovat slovo "Ajax."

Díky za odpověď.

 
Nahoru Odpovědět
7. března 11:03
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.