Jak opravdu rozchodit ajax odkazy, pokud mám vše dle návodu?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
jozin
Člen | 14
+
0
-

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
+
0
-
  1. povolený JS předpokládám máš?
  2. ve FF ve vývojářské konzoli si dej panel „síť“ a sleduj, jestli se odešle ajaxový request. Pokud ano, tak v response uvidíš, jestli není nějaká chyba.
jozin
Člen | 14
+
0
-

ad 1. ano
ad 2. koukal jsem, žádný request, při klepnutí se prostě nic neděje

ale děkuji za snahu ;)

Šaman
Člen | 2666
+
0
-

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.

jozin
Člen | 14
+
0
-

Zkusil jsem nahradit i jquery.js, bohužel bez úspěchu, už jsem zkoušel i smazat cache, taky nic, už mě nějak nic nenapadá

Šaman
Člen | 2666
+
0
-

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)

jozin
Člen | 14
+
0
-

Tak bohužel ani s tímto nejde request, dal jsem i jquery 1.7 které ten doplňěk vyžadoval a ani tak nic, nejspíš dělám nějakou blbost, ale nevím kde.

Mysteria
Člen | 797
+
0
-

Můžeš to zkusit ve Chrome? Protože zrovna včera jsem upravoval jednu starší aplikaci a ve Firefoxu mi taky AJAX requesty vůbec nejdou, ale v Chrome a IE v pořádku. Ještě jsem neměl čas zjišťovat čím to je, ale třeba budeš mít stejný problém.

jozin
Člen | 14
+
0
-

Bohužel ani tak to nejede

jozin
Člen | 14
+
0
-

Tak beru zpět, po smazání cache prohlížeče to na chromu jede, ale firefox ne, děkuji za pomoc

Mysteria
Člen | 797
+
0
-

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
+
0
-

Já jsem to teď nějak záhadně rozchodil, teda ty requesty, ale mám zase problém, že request projde (hlavička: 200 OK), ale nic se nezobrazí.

Šaman
Člen | 2666
+
0
-

Tak se podívej co se ti vrací jako odpověď. Jestli správné snippety, tak to bude záležitost šablony a definice snippetů.

jozin
Člen | 14
+
0
-

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.