naja-js/naja

v 1.7 - forceRedirect

mira-kovar opened this issue · 10 comments

Ahoj, odebrání forceRedirect bych považoval za brake change. Když, když server pošle v response redirect: "http://samesite/xxx" tak naja vytvoří request na redirectovanou stárnku, ale nepošle hlavičku x-requested-with: XMLHttpRequest, takže server místo json (snippetů) pošle HTML. Nejde o chybu?

Ahoj, obávám se, že nerozumím, kde je problém.

Předně: forceRedirect rozhodně není odebraný, odebraná je pouze podpora pro čtení tohoto nastavení z payloadu odpovědi, a to i tak až v nadcházející verzi 2.0; verze 1.7 sice emituje warning do konzole, když na klíč forceRedirect v odpovědi narazí, ale pořád k němu přihlíží.

Pokud je přesměrování lokální a není vynucený tvrdý redirect, Naja "přesměruje" stejným mechanismem, jakým odesílá všechny ostatní ajaxové požadavky, tedy včetně patřičných hlaviček. Nemyslím si, že by se mohlo stát, že by jeden request poslala správně, a jiný už ne.

Ta cílová stránka, na kterou přesměrováváš, počítá s tím, že může být zavolaná ajaxem? Tedy presenter invaliduje snippety, pokud isAjax()?

(Ale samozřejmě je možné, že tam chyba je. Bylo by skvělé, pokud by se ti podařilo připravit a někam nahrát nějaký minimální kód, na kterém je to reprodukovatelné.)

Ahoj,
chybně jsem uvedl forceRedirect a přitom jsem myslel redirect. Samozřejmě, že Presenter poslouchá na ajax a odpovídá snippety.

Do přílohy posílám screenshoty 1.6.0 a verze 1.7.0. Kde jde vidět, že v 1.7.0 při json respone {"redirect": "https://samedomain/xxx"} další request není obohacen o hlavičku x-requested-with: XMLHttpRequest. Pokud to nepomůže, tak přes vánoce zkusím udělat ukázkovou instalaci nette a někde to zveřejním.

Jako jednoduchá oprava, byl downgrade na verzi 1.6.0.

verze 1.6.0 - funguje

1 6 0

verze 1.7.0 - nefunguje

1 7 0

Ha, vida, tak tam asi bude někde bug, i když zatím netuším jaký. Moc díky za report! Zkusím si to v nějaké volné chvíli zreprodukovat sám, stejně jsem chtěl kvůli 2.0 udělat nějaký sandbox, kde budu moct vyzkoušet, že fakt všechno funguje.

Zkusím si to v nějaké volné chvíli zreprodukovat sám

Tak se obávám, že se nezadařilo 😕 mohl bych tedy @mira-kovar poprosit o nějaký minimální kousek kódu, na kterém to půjde zreprodukovat? Případně se můžeš pokusit "rozbít" ten můj

Issue leží ladem, zavírám. Pokud to ještě bude aktuální, směle ho znovu otevři.

Už jsem došel na to proč to nefungovalo. Problém byl v tom, že jsem nepoužil $this->payload->postGet = TRUE;

Mimochodem, trápí mě jedna dopředná kompatibilita a to$payload->forceRedirect Proč to chceš v verzi 2.0 úplně vyřadit?

Přijde mi super, Například košík. Smazání jedné položky košíku jde udělat s invalidací snippetu, ale funkce vyprázdni košík je jednodušší zavolat s forceRedirectem. Zde bych nepochodil s data-naja-force-redirect nad .ajax elementem, protože je to jeden formulář s vícero handlers.

Už jsem došel na to proč to nefungovalo.

👍

Proč to chceš v verzi 2.0 úplně vyřadit?

K tomu už jsem se vyjadřoval, zásadní věta je: "Server by měl klientu říct, co po něm chce, ale už mu nediktovat, jak to má udělat – to ať je v režii klienta," a to si myslím pořád.

Zde bych nepochodil s data-naja-force-redirect nad .ajax elementem, protože je to jeden formulář s vícero handlers.

To, který element je při odeslání formuláře autoritativní (formulář vs tlačítko), je jedna z věcí, které bych chtěl taky ještě zrevidovat a dopsat pár testů, takže za to teď nemůžu dát ruku do ohně, ale myslím si, že by mělo být možné dát ten data-atribut na odesílací tlačítko, pak se aplikuje jen pro odeslání formuláře daným tlačítkem.

Už jsem došel na to proč to nefungovalo.

👍

Proč to chceš v verzi 2.0 úplně vyřadit?

K tomu už jsem se vyjadřoval, zásadní věta je: "Server by měl klientu říct, co po něm chce, ale už mu nediktovat, jak to má udělat – to ať je v režii klienta," a to si myslím pořád.

Zde bych nepochodil s data-naja-force-redirect nad .ajax elementem, protože je to jeden formulář s vícero handlers.

To, který element je při odeslání formuláře autoritativní (formulář vs tlačítko), je jedna z věcí, které bych chtěl taky ještě zrevidovat a dopsat pár testů, takže za to teď nemůžu dát ruku do ohně, ale myslím si, že by mělo být možné dát ten data-atribut na odesílací tlačítko, pak se aplikuje jen pro odeslání formuláře daným tlačítkem.

Dík za odkaz který jsi psal dříve mě. 👍 Stihl jsem to úspěšně zapomenout. Zkus si ještě představit variantu kdy máš ten formulář v modálním okně. Okno má formulář ten má jediné tlačítko. V případě neúspěchu hláška uživatel nenalezen po (ajax requestu - modal zůstává otevřen) v případě, že uživatel je přihášen (forceRedirect) a celé UI se tím pádem obnoví (modal se zavře).

Bylo by fajn, kdyby ta funkcionalita šla v 2.0 vrátit pomocí pluginu/extension?

Pokud při neúspěchu server neposílá redirect, nic se v takovém případě neděje, takže bych tomu formuláři prostě zapnul data-naja-force-redirect.

Jinak pokud obejdeš standardní chování (tj. nepošleš ze serveru přímo redirect, ale pošleš si potřebné informace v payloadu), můžeš si nad tím napsat vlastní obslužnou extension.

Ok. považuj to za vyřízené. Děkuji za odpovědi. zkusím ty forceRedirecty přepsat.