Nette.ajax v IE8 odešele každý request ajaxově a ještě zároveň normálně
- tobice
- Člen | 30
Používám nette.ajax ke kompletní ajaxizaci celé aplikace. V běžných moderních prohlížečích funguje aplikace bez problémů, bohužel ale musím podporovat i Internet Explorer 8 a tam už to trochu dře. Kdykoliv kliknu na odkaz, tak se korektně odešle Ajaxový požadavek a zpracuje se odpověď, ale paralelně s tím odejde i běžný synchronní požadavek. Tj. stránka se napřed částečně překreslí na základě odpovědi na ajaxový požadavek (tj podle invalidovaných snippetů) a pak se překreslí celá, když dorazí odpověď na synchronní požadavek. Debugoval jsem to pomocí Fiddleru (jednoduchá proxy) a je to tam hezky vidět. V případě formulářů je to ještě zajímavější, protože tam se odešlou 2 ajaxové a jeden synchronní požadavek. Celé to působí, jakoby v jQuery pořádně nefungoval event.preventDefault(), nicméně ani to nemůže způsobit trojité odeslání formuláře. V ostatních prohlížečích se v pořádku odešle jeden požadavek.
- frosty22
- Člen | 373
Tak je dost možné že v IE8 preventDefault nefunguje – http://stackoverflow.com/…tive-for-ie8
Jinak mě se tohle stávalo, když jsem měl problém v JS kódu jako takovém, v podstatě stačí když byla chyba v události navěšené na tlačítko a jakmile se skript ukončil, tak nevrátil DOM objektu, v tomto případě odkazu FALSE, a ten tedy pokračoval ve své činnosti a přesměroval.
- tobice
- Člen | 30
No na tyto typy dotazů jsem také narazil. Akorát všechno to je 2–3 roky staré a předpokládal bych, že za tu dobu už si to jQuery pohlídalo, aby to fungovalo správně. Minimálně v současné verzi to nehází žádnou chybu při použití event.preventDefault(), tedy nějakým způsobem už to podporované je. Zkoušel jsem nicméně ten nette.ajax modifikovat a na správných místech nahradit za event.returnValue, ale nepomohlo.
- frosty22
- Člen | 373
Předpokládám tedy, že jsi zkoušel celé debugovat, a opravdu to neháže v konzoli vůbec žádnou chybu? http://stackoverflow.com/…pt-with-ie-8
Na jednu stránku se nedivím, přeci jen IE, .. ale právě osobně mám zkušenosti s podobnými problémy, právě díky chybám i úplně jinde v kódu – a vždy tedy bylo potřeba sledovat chybovou konzoli a nesmělo tam být nic :)
Případně můžeš zkusit ještě vracet v navěšených událostech na odkazech „return false“ ..
BTW: Tam máš nasazené tedy pouze nette.ajax nebo tam máš i vlastní navěšené eventy?
- tobice
- Člen | 30
Vlastní eventy tam mám, ale jako jednu z prvních věcí jsem je zkusil zablokovat. S debugováním IE8 je to náročné, ale zatím se mi z něj žádnou chybu do konzole vytřískat nepodařilo. Tváří se, že je všechno naprosto v pořádku. No moje naděje, že se bude jednat o nějakou očividnou blbost, kterou jsem přehlédl, se ukazují býti liché, tak asi nezbude než mravenčí prací dohledat, v čem je problém.
- tobice
- Člen | 30
Tak nakonec se ukázalo, že problém byl přímo v jQuery. Na webu jsem používal staženou šablonu a její součástí byl dost rozsáhlý balík javascriptových pluginů, mezi kterými byla i postarší verze jQuery (1.9). Postupným vypínáním pluginů se podařilo odhalit, že problém je přímo v jQuery a že s aktuální verzí (1.10) už to jede bez problémů.