Ajaxové překreslení formuláře, nebo download souboru

Šaman
Člen | 2634
+
0
-

Ahoj. Mám formulář, kde sbírám data pro vygenerování souboru. Když je vše ok, vygeneruji soubor a vrátím fileresponse. Když to není ok, chci překreslit nějaké snippety (flashmessage třeba).

Problém je, že překreslování funguje jen pokud je formulář ajaxový a stahováni souboru jen pokud ajaxový není.
Napadá vás, jak z toho ven? Třeba vyvolat překreslení snippetů v onError i když formulář není ajaxový?
(používám nette.ajax.js)

Díky.

Phalanx
Člen | 310
+
0
-

Ahoj, řeší to tady:
https://stackoverflow.com/…jax-call-php

Zaujala mě nejvíc poslední odpověď – skrytý iframe.

MajklNajt
Člen | 471
+
+2
-

Ahoj, robím to tak, že si pri spracovaní formulára súbor poskladám a uložím, potom:

  1. ak nastane chyba, prekreslím snippety
  2. ak to prejde bez chyby, pošlem redirect na actionDownload, ktorá až pošle FileResponse
Andy3
Člen | 15
+
+1
-

@Phalanx Drive, nez byl jeste Ajax, tak se to delalo prave pres iframe. Problem tohodle reseni je, ze vlastne Ajaxem vyvolas
dalsi „Ajax“. Blbe se resi status code, musis si to vyresit sam podle obsahu co iframe vrati atd. To jak pise @MajklNajt je asi idealni reseni, jen to poskladani a ulozeni delat mezi bodem 1. a 2.

Podivej se na to z pohledu „typovosti“. Vratim html(json) nebo file neni uplne idealni.

Editoval Andy3 (10. 7. 2019 20:22)

Šaman
Člen | 2634
+
0
-

Ahoj, tak to otevírám ještě jednou.
V minulém projektu (Nette 2.4, PHP 7.4, nette.ajax) mi fungovalo ajaxové odeslání formuláře, v obsluze si uložit vygenerovaný soubor na disk a redirectnout na handle nebo action, která jen odeslala soubor uživateli.

Teď mám nový projekt (Nette 3, PHP 7.4, Naja) a soubor se mi odmítá stáhnout. Po dvou dnech jsem zjistil, že problém není v tom, že místo nette.ajax používám Naju, ale v tom že i po redirectu mi zůstává $this->isAjax() === true. Tedy že zůstává nastavená hlavička requestu 'X-Requested-With' => 'XMLHttpRequest'.

Řešil někdo podobný problém? Jak zařídit, aby po redirectu už nebyl nastavený ajax?

Šaman
Člen | 2634
+
0
-

Tak vyřešeno.

  • nette.ajax.js toto opravdu nedělal a po redirectu se provedl neajaxový požadavek
  • naja.js to popisuje přímo v dokumentaci – běžně drží ajaxovost i po redirectech, ale dá se to vypnout
  • ale funguje mi to až v naja 2

Nastavení tvrdého neajaxového redirectu pro konkrétní adresy v Naja 2.

Editoval Šaman (25. 3. 2022 0:33)