Ajax request nevrací JSON
- akadlec
- Člen | 1326
Když pomocí nette.ajax.js a konkrétně pomocí $.nette.ajax({}) pošlu požadavek na server tak se zpracuje jako normální. V presenteru sice vidím že je to ajax request ale na výstup jde html místo JSON. Až když přidám na konec terminate() tak to pošle payload. Co dělám špatně? Nebo ten terminate signál je potřeba poslat vždy?
- froggy
- Člen | 17
Neuvádíš kód v presenteru. Takto posílám data formátovaná jako JSON zpět do stránky. Jestli to pomůže?
public function actionDataSelect($kategorie, $znacka, $vlastnost) {
$this->payload->kategorie = $this->katalog->getSkupinySelector();
$this->payload->znacka = $this->katalog->getZnackySelector();
$this->payload->vlastnost = $this->katalog->getVlastnostiSelector('produkt');
$this->sendPayload();
}
- Vojtěch Dobeš
- Gold Partner | 1316
Ještě lepší než terminate()
je sendPayload()
,
které přesně říká, pošli payload. Standardně se vrací HTML, JSON se
vrací teprve v případě, že byl invalidován nějaký snippet, anebo že to
bylo explicitně vyžádáno (právě tou metodou
sendPayload()
).
- akadlec
- Člen | 1326
No v presenteru nic extra není. Mám to např na handle pro smazání
záznamů z tabulky. Akce se provede a na konci handle je otázka zda je ajax
nebo ne, když není ajax tak to udělá redirect na výpis jinak nic.
Ono ani nepotřebuju provést invalidaci nějakých snippetů, jen aby to
vrátilo JSON a né html.
V beforeRender mám teda ještě přidáno vyzobání flashmessages, které si naházím do pole a to pak hodím do payload.
public function beforeRender()
{
$messages = ...vyzobrani z flashmessages
$this->payload->messages = $messages;
}
Když na konci toho before renderu hodim terminate tak to pošle jako json jinak to pošle jako html.
- Vojtěch Dobeš
- Gold Partner | 1316
Automaticky se posílá HTML třeba proto, aby se snadno dalo použít
$.load()
. Při použití tohoto by se zase někdo ptal „a proč
to posílá JSON a ne HTML“ :).
- akadlec
- Člen | 1326
jj chapu. u jquery ajaxu se dá nastavit datatype na json ale tento údaj je tuším jen pro samotné jquery že očekává data ve formě json a proto je hned rozparsuje. Jen mě to překvapilo no ;)
Ale nemuselo by to být fixně podle ajax request ale třeba na základě když se něco hodí do payload co? Protože do něho vždy něco nahodim, minimálně teda ty zprávičky. Nebo se ten payload naplní i v non-ajax požadavku?