Zpracování formuláře přes ajax a redirect na jiný presenter nebo view
- freely111
- Člen | 41
Ahoj, měl bych dotaz, zda jde přesměrovat zpracování formuláře přes ajax a následně místo překreslení udělat někam např. na jiný presenter přesměrování pomocí např.: $this->redirect(‚:Front:Homepage:‘) ?
Mě se zdá, že mi to dříve fungovalo, ale redirect mi teď nic neprovede. Používám v projektu knihovnu ajax: nette.ajax.js (verze 2.0.0) + používám i history.ajax.js, ale tu jsem si vypnul dle informací, které jsem si ohledně tohoto problému našel. Ale ani tak mi to přesměrování neudělá. V nette.ajax.js jsem našel rozšíření „redirect“, ale když si lognu co při zavolání redirectu je v proměnné payload.redirect, tak je undefined. Undefined v payload není pouze, pokud zavolám při zpracování formuláře přes ajax $this->redirect(‚this‘) a redirect se provede. Ale pokud bych chtěl zavolat redirect s jinou hodnotou, tak se vůbec nic neprovede a payload.redirect v knihovně nette.ajax.js je undefined.
Nevíte jestli to nějak jednoduše jde, že i za použití ajaxu jde udělat přesměrování? Verzi nette mám 2.3. Díky za případné rady.
- GEpic
- Člen | 566
freely111 napsal(a):
Ahoj, měl bych dotaz, zda jde přesměrovat zpracování formuláře přes ajax a následně místo překreslení udělat někam např. na jiný presenter přesměrování pomocí např.: $this->redirect(‚:Front:Homepage:‘) ?
Mě se zdá, že mi to dříve fungovalo, ale redirect mi teď nic neprovede. Používám v projektu knihovnu ajax: nette.ajax.js (verze 2.0.0) + používám i history.ajax.js, ale tu jsem si vypnul dle informací, které jsem si ohledně tohoto problému našel. Ale ani tak mi to přesměrování neudělá. V nette.ajax.js jsem našel rozšíření „redirect“, ale když si lognu co při zavolání redirectu je v proměnné payload.redirect, tak je undefined. Undefined v payload není pouze, pokud zavolám při zpracování formuláře přes ajax $this->redirect(‚this‘) a redirect se provede. Ale pokud bych chtěl zavolat redirect s jinou hodnotou, tak se vůbec nic neprovede a payload.redirect v knihovně nette.ajax.js je undefined.
Nevíte jestli to nějak jednoduše jde, že i za použití ajaxu jde udělat přesměrování? Verzi nette mám 2.3. Díky za případné rady.
A formulář se ti jinak zpracuje? Protože mě toto funguje normálně (a vždy fungovalo) (taktéž používám nette.ajax.js)
Editoval GEpic (30. 7. 2016 5:57)
- freely111
- Člen | 41
Ano, formulář přes ajax se zpracuje, jeho obsluha se za volá, např. se uloží data do DB a na konci mám ten $this->redirect(‚:Front:Homepage:‘) a přesně a něm se to zastaví a redirect se neprovede. A při redirektu se zavolá v nette.ajax.js:
<script>
// support $this->redirect()
$.nette.ext('redirect', {
success: function (payload) {
if (payload.redirect) {
window.location.href = payload.redirect;
return false;
}
}
});
</script>
ale hodnota v payload.redirect je undefined a to je asi ten problém :(
GEpic napsal(a):
freely111 napsal(a):
Ahoj, měl bych dotaz, zda jde přesměrovat zpracování formuláře přes ajax a následně místo překreslení udělat někam např. na jiný presenter přesměrování pomocí např.: $this->redirect(‚:Front:Homepage:‘) ?
Mě se zdá, že mi to dříve fungovalo, ale redirect mi teď nic neprovede. Používám v projektu knihovnu ajax: nette.ajax.js (verze 2.0.0) + používám i history.ajax.js, ale tu jsem si vypnul dle informací, které jsem si ohledně tohoto problému našel. Ale ani tak mi to přesměrování neudělá. V nette.ajax.js jsem našel rozšíření „redirect“, ale když si lognu co při zavolání redirectu je v proměnné payload.redirect, tak je undefined. Undefined v payload není pouze, pokud zavolám při zpracování formuláře přes ajax $this->redirect(‚this‘) a redirect se provede. Ale pokud bych chtěl zavolat redirect s jinou hodnotou, tak se vůbec nic neprovede a payload.redirect v knihovně nette.ajax.js je undefined.
Nevíte jestli to nějak jednoduše jde, že i za použití ajaxu jde udělat přesměrování? Verzi nette mám 2.3. Díky za případné rady.
A formulář se ti jinak zpracuje? Protože mě toto funguje normálně (a vždy fungovalo) (taktéž používám nette.ajax.js)
- freely111
- Člen | 41
Tak už jsem zjistil proč mi nejede ten klasický redirect při zpracování
ajax požadavku.
Aby mi redirect fungoval, musím z config.neon odebrat či zakomentovat
extension:
<?php
extensions:
ajaxHistory: VojtechDobes\NetteAjax\HistoryExtension
?>
Potom když zpracuji formulář ajaxově nebo i normální ajax odkaz, tak mi $this->redirect(:Front:Homepage:) funguje.
Ale nevíte jak současně zachovat ajaxHistory a pro konkrétní odkazy či formuláře to zakázat?
Zkoušel jsem textovým odkazům nastavit atribut data-ajax-off=„history“ a bohužel to nepomohlo. I formuláři jsem zkoušel na jeho form přidat data-ajax-off=„history“ + jeho tlačítku taky data-ajax-off=„history“ a taky to nepomohlo, redirect mi to nevyvolá :(
Pouze mi to jede, pokud odstraním tu ajaxHistory extensions.
Díky za případné rady.
- GEpic
- Člen | 566
freely111 napsal(a):
Tak už jsem zjistil proč mi nejede ten klasický redirect při zpracování ajax požadavku.
Aby mi redirect fungoval, musím z config.neon odebrat či zakomentovat extension:<?php extensions: ajaxHistory: VojtechDobes\NetteAjax\HistoryExtension ?>
Potom když zpracuji formulář ajaxově nebo i normální ajax odkaz, tak mi $this->redirect(:Front:Homepage:) funguje.
Ale nevíte jak současně zachovat ajaxHistory a pro konkrétní odkazy či formuláře to zakázat?
Zkoušel jsem textovým odkazům nastavit atribut data-ajax-off=„history“ a bohužel to nepomohlo. I formuláři jsem zkoušel na jeho form přidat data-ajax-off=„history“ + jeho tlačítku taky data-ajax-off=„history“ a taky to nepomohlo, redirect mi to nevyvolá :(
Pouze mi to jede, pokud odstraním tu ajaxHistory extensions.
Díky za případné rady.
A k čemu používáš history Ajax? Já ho nikdy nepoužíval a nemám pocit, že bych o něco přišel? :)
- freely111
- Člen | 41
Máš pravdu, taky to zjišťuji, že ho vůbec nepotřebuji. Nějak moc zatím nevím k čemu to je vhodné a v jakém případě to budu potřebovat a co mi to přesně zajistí.
Já jsem si totiž myslel, že tu extension ajaxHistory od VojtechDobes potřebuji, když např. při ajaxovém stránkování si chci nastavovat konkrétní URL a aby fungovalo i tlačítko zpět i vpřed.
Ale ta URL se dá nastavit i bez toho, např. takto:
<?php
$this->presenter->payload->url = $this->presenter->link('this', ['name' => $name]);
?>
Jestli tomu tedy dobře rozumíš, můžeš mi to trochu vysvětlit a uvést stručně příklad? Moc dík :)
GEpic napsal(a):
freely111 napsal(a):
Tak už jsem zjistil proč mi nejede ten klasický redirect při zpracování ajax požadavku.
Aby mi redirect fungoval, musím z config.neon odebrat či zakomentovat extension:<?php extensions: ajaxHistory: VojtechDobes\NetteAjax\HistoryExtension ?>
Potom když zpracuji formulář ajaxově nebo i normální ajax odkaz, tak mi $this->redirect(:Front:Homepage:) funguje.
Ale nevíte jak současně zachovat ajaxHistory a pro konkrétní odkazy či formuláře to zakázat?
Zkoušel jsem textovým odkazům nastavit atribut data-ajax-off=„history“ a bohužel to nepomohlo. I formuláři jsem zkoušel na jeho form přidat data-ajax-off=„history“ + jeho tlačítku taky data-ajax-off=„history“ a taky to nepomohlo, redirect mi to nevyvolá :(
Pouze mi to jede, pokud odstraním tu ajaxHistory extensions.
Díky za případné rady.
A k čemu používáš history Ajax? Já ho nikdy nepoužíval a nemám pocit, že bych o něco přišel? :)
Editoval freely111 (31. 7. 2016 1:31)
- GEpic
- Člen | 566
Já se snažím klienty odnaučit používat ‚history‘ tlačítka v prohlížeči, většinou nadělají spousty škody (protože mě samozřejmě nedojde je při testech zkusit). Lidé si většinou myslí, že to je předchozí stránka , a né krok zpět v historii. Proto většinou tvořím UI takové, aby člověk nemusel opustit ‚okno‘ webu. Tvořím i několik aplikací, které se využívají na fullscreen a vypadají jako desktopová aplikace. Nevím jestli to tak vidím jen já, já také history tlačítka nepoužívám.
Editoval GEpic (31. 7. 2016 2:14)
- freely111
- Člen | 41
Díky moc za rady. Já jsem si prošel teď nějaké info okolo toho HTML5
History API:
https://developer.mozilla.org/…/History_API
http://www.vzhurudolu.cz/…tml5-history
pro které ta extension ajaxHistory zřejmě slouží.
Myslím, že to zatím nebudu potřebovat, tak si tu extension úplně vypnu, aby mi šel ten klasický redirect při ajaxových requestech.
GEpic napsal(a):
Já se snažím klienty odnaučit používat ‚history‘ tlačítka v prohlížeči, většinou nadělají spousty škody (protože mě samozřejmě nedojde je při testech zkusit). Lidé si většinou myslí, že to je předchozí stránka , a né krok zpět v historii. Proto většinou tvořím UI takové, aby člověk nemusel opustit ‚okno‘ webu. Tvořím i několik aplikací, které se využívají na fullscreen a vypadají jako desktopová aplikace. Nevím jestli to tak vidím jen já, já také history tlačítka nepoužívám.