Jak opravdu rozchodit ajax odkazy, pokud mám vše dle návodu?
- jozin
- Člen | 14
Zdravím,
podle různých návodů jsem se snažil zprovoznit odkazy přes ajax. Prakticky jde jen o signál, který dá do proměnné nějakou hodnotu a překreslí snippet (jedná se opravdu o snad nejprimitivnější použití).
Můj postup byl následující:
- jquery.js byl již v @layout.latte, takže jsem jej nechal
- v @layout.latte jsem pod jquery přidal nette.ajax.js (otestoval jsem, že není špatná adresa, dle pozorování sítě request proběhl vpořádku a i proklikem jsem otestoval, že je vše OK)
- v main.js jsem dal $.nette.init(); do $(function () { … }
- v presenteru jsem si přidal privátní proměnnou
- v render metodě (konkrétně renderAdvert) jsem do template dal načíst privátní proměnnou
- v presentru jsem si přidal metodu handleReports ve které jen měním danou privátní proměnnou a pokud je ajax, tak invaliduji snippet ($this->redrawControl(‚reports‘))
- v šabloně je pak {snippet reports} a jeho obsah je pro test jen proměnná předávaná z presenteru
- před snippetem je odkaz, který je generovaný takto <a n:href=„reports!“ class=„ajax“>…
Nyní nedojde k žádné chybě, ani warningu k ničemu, po klepnutí na odkaz se nevykoná žádný request. Pokud třídu ajax odmažu, vše funguje.
Poznámka na konec, podle mých testů je úplně jedno jak chci použít ajax, prostě nefunguje nikdy
- Šaman
- Člen | 2666
A ten main.js
načítáš taky?
Případně si ještě zkontroluj, že ten nette.ajax.js
je opravdu
z toho archívu, ze kterého máš Nette. Stará verze (která často zůstane
v projektu po upgrade Nette composerem) nemusí být kompatibilní.
Jestli se nic neodesílá, tak bude problém v těch js souborech, přilinkování, nebo třídě ajax. Snippety a podobné budou na pořadu dne až ti odejde request.
- Šaman
- Člen | 2666
Zkus tenhle
doplněk. Měl by být aktuální a skoro všichni ho používají. Já mám
trochu dojem, že v tom originálním Nette scriptu se muselo do main.js
ještě dopsat navázání na odkazy se třídou ajax
, zatimco tady
ne, tady stačí to $nette.init()
.
Editoval Šaman (11. 8. 2014 21:59)
- Mysteria
- Člen | 797
Jo, za nic. Teď jenom zjistit proč to ve FF nejde. Teď jsem se na to ještě díval – na localhostu mi AJAX funguje i v FF, ale jakmile to nahraju na webhosting (vlastní VPS nebo i Wedos), tak tam prostě FF odmítá AJAXové odkazy zpracovávat. Ani ťuk, žádný request. Zajímavé ale je, že AJAXové formuláře fungují, problém mám jenom s odkazama. Přitom nette.ajax se zavolá, protože mám na start navěšenej spinner, který se „roztočí“ a to je všechno, request se vůbec nepošle, takže se ani ke complete nedostane, aby zmizel.
- jozin
- Člen | 14
Tak čím to je nevím, vracelo to správné snippety, když jsem zkoušel neexistující, tak se v odpovědi nepřenesl a stejně to firefox nezobrazil. Zajímavé ale je, že jsem si říkal, že to zkusím udělat jako komponentu, napsal jsem si tedy třídu dědící \Nette\Application\UI\Control, té jsem v metodě render předal template ve kterém vytvářím snippet. V presenteru vytvářím danou komponentu, ke které pak přistupuji přes metodu handle* a když na komponentě zavolám redrawControl(), tak vše funguje, netuším jak je to možné, ale funguje.