Naja data-ajax-append a historie

luboshilgert
Člen | 11
+
0
-

Ahoj,
včera jsem přešel na Naju a řeším teď jeden „problém“. Mám tabulku a vždy když doskroluji dolů tak tam appenduji další položky (lazy load stránkování pomocí data-ajax-append). Položku v seznamu si mohu rozkliknout což překreslí hlavní snippet. Pokud pak dám back button vrátí mě to na seznam ale jakoby na stránku 1 úplně dolů. Potřeboval bych nějak zapnout historii. Zkusil jsem na ten loadMore signál dát data-naja-history=„replace“ nicméně to nepomáhá a konzole vypisuje chybu:

Uncaught
Exception { name: „NS_ERROR_ILLEGAL_VALUE“, message: "", result: 2147942487, filename: „http://localhikob2b/assets/js/Naja.js“, lineNumber: 2159, columnNumber: 0, data: null, stack: „replaceState@http://localhikob2b/assets/js/Naja.js:2159:65\npushNewState@http://localhikob2b/assets/js/Naja.js:2226:37\nmakeRequest@http://localhikob2b/assets/js/Naja.js:2364:15\nasyncclickElement@http://localhikob2b/assets/js/Naja.js:1955:27\nhandleUI@http://localhikob2b/assets/js/Naja.js:1919:19\nEventListener.handleEventbindElement@http://localhikob2b/assets/js/Naja.js:1883:22\nbindUI@http://localhikob2b/assets/js/Naja.js:1887:25\ninitialize@http://localhikob2b/assets/js/Naja.js:1865:15\ninitialize@http://localhikob2b/assets/js/Naja.js:2324:15\nEventListener.handleEvent*@http://localhikob2b/assets/js/main.js:4:10\n“ }
Naja.js:2159

Jde nějak historie v kombinaci s data-ajax-append zprovoznit nebo dělám někde chybu?
Díky za případné tipy a rady

jiri.pudil
Nette Blogger | 1028
+
0
-

Ahoj, viz https://github.com/…ja/issues/17. Ve zkratce: Naja ukládá do historie i aktuálně vykreslené snippety, díky tomu se potom přechod zpět v historii obejde bez dalšího requestu. Různé prohlížeče ale mají různé limity velikosti history state objektu, na které jsi zřejmě narazil.

Řešením by mohlo být pro ten request donačítající další položky vypnout cachování snippetů, ale obávám se, že v případě nekonečného stránkování se to neobejde bez nějaké vlastní logiky, protože jinak ti Naja bude při navigaci data pořád přidávat místo překreslení 🤔

luboshilgert
Člen | 11
+
0
-

Super děkuji za odpověď. Skutečně v Chromu i Edge to funguje jak má a to až do úplného konce. Firefox selže hned při načtení „druhé“ stránky. Při vypnutí cachování snippetů se to chová tak, že se vlastně vykreslí seznam položek a začíná to tou první na dané stránce (položky na předchozích stránkách se nezobrazí).
Každopádně díky aspoň vím, čím to je a dá se na tom pracovat:)

luboshilgert
Člen | 11
+
0
-

Ještě bych měl dotaz, který se netýká historie. Mám klasický vyhledávací formulář, který pošle tento request
-----------------------------37610477407073825011076363015
Content-Disposition: form-data; name=„search“
11200
-----------------------------37610477407073825011076363015
Content-Disposition: form-data; name=„_do“

searchForm-submit
-----------------------------37610477407073825011076363015
Content-Disposition: form-data; name=""

-----------------------------37610477407073825011076363015--

Na localhostu mi vše funguje dobře ale na ostrém serveru mám nasazený modsecurity a ten mi požadavek blokuje. Vadí mu poslední prázdné pole name="".
Jednak moc nechápu, kde se tam to pole bere…mám tam jen input na vyhledávání a button na odesílání. Doteď jsem používal nette.ajax.js a ten to poslední vyplnil name=„undefined“ a to bylo zřejmě pro modsecurity ok.

luboshilgert
Člen | 11
+
0
-

Tak jsem objevil chybku.
V šabloně jsem měl na odeslání formuláře jen button type=submit ale žádné name… stačilo ho tedy pojmenovat

jiri.pudil
Nette Blogger | 1028
+
0
-

Vida, to je bug, díky za report!

Zábavné je, že to je špatně i v nette.ajax.js, odkud jsem to převzal 😇 – pole s prázdným name se podle specifikace HTML mají úplně vynechat.

luboshilgert
Člen | 11
+
0
-

Tak super…to jsem rád, že jsem alespoň trochu pomohl:) Zajímavé tedy ale je, že nette.ajax.js vyplnil to name=„undefined“ (a modsecurity byl spokojen) kdežto Naja odesílala name=„“