Naja ajax odkazy a Error4×xPresenter
- d@rkWolf
- Člen | 167
Zdravím, netušíte někdo, jak přesvědčit Naju(mám pocit, že při dřívějších pokusech s Nette.Ajax jsem měl stejný problém), aby překreslila snippety pro Error4xxPresenter? Vycházím ze Sandbox Nette 3, hlavní ErrorPresenter mám mimo moduly a Error4xxPresenter mám v každém modulu(Admin/Front/možná eště něco) samostatný s upravenými šablonami, protože v případě 4xx chyb chci, aby se jejich text zobrazoval uvnitř designu stránky.
V případě, že vyvolám pod přihlášením neexistující stránku běžným odkazem, dostanu 404.latte tak jak si představuju, ale v případě, že tu neexistující stránku vyvolám odkazem s třídou ajax, dostanu GET se 404, jsou tam i data pro snippety na překreslení(title, content, flash messages) s obsahem odpovídajícím 404.latte, ovšem na stránce se to nepřekreslí, vidím to jen v požadavku v konzoli v prohlížeči.
CatchExceptions mám nastaveno na true, abych viděl, co ten error presenter zobrazuje.
Předpokládám, že to způsobuje něco v Naja/Nette.ajax, když to při neajaxovém požadavku funguje? Bohužel nemám nejmenší tušení co…
Ještě horší je to s 403kou, protože tam na mě jakýkoliv odkaz, ať ajaxový, nebo neajaxový, vyhazuje Nette\Application\ForbiddenRequestException 403 z metody checkRequirements a přitom v konzoli v prohlížeči je 500 a nikde žádný zalogovaný error…
- jiri.pudil
- Nette Blogger | 1029
Ahoj, Naja překresluje snippety a tak vůbec reaguje na odpověď jen tehdy,
je-li request úspěšný (tzn. status code je v rozsahu
[200, 300)
). V takovém případě dispatchuje událost
success
, na kterou právě reagují všechny core komponenty,
které se starají o překreslení snippetů, integraci do History API aj.
V opačném případě (tedy i při 404) pouze vyvolá událost
error
. Do ní se předává jak xhr
, kterého se
můžeš zeptat na status
, tak response
, pokud se ji
podaří ze serveru přijmout a zparsovat, takže teoreticky můžeš na tuto
událost poslouchat a pro určité kódy vyvolat překreslení
snippetů ručně:
naja.addEventListener('error', ({xhr, response}) => {
if (xhr.status === 404 && response.snippets) {
naja.snippetHandler.updateSnippets(response.snippets);
}
});
- d@rkWolf
- Člen | 167
@jiripudil ahoj, vypadá to, že to funguje, dík moc. Bohužel ten objektovej JS jde dost mimo mě, moc netuším, co se tam děje, u starýho nette.ajax. sem tak nějak byl už zvyklej na pár potřebných věcí s jQuery a teď todle…došel jsem k tomu, že tu podmínku můžu rozšířit na >= 400 a <= 499, ať to pobere vše, co jde na ty 4xx šablony u Error4xxPresenteru.
Bohužel mi furt crashují práva, 403 ForbiddenRequest nepropadá do Error4xxPresenteru a nemůžu přijít na to proč, ale to není problém s Ajaxem a Najou, to je problém někde jinde, protože to dělá jak u normálních, tak ajax požadavků. :-(