Vlastní data zmizí z payloadu při ajaxovém redirectu, co mi uniká?
- Jan Mikeš
- Člen | 771
Ahoj, obsluhuji všechny požadavky ajaxově, funguje mi i ajax redirect, občas ale potřebuji neajaxový redirect, chtěl jsem je rozlišit proměnnou v payloadu, jenže po několika hodinách hledání a debugování už nevím kam dál.
Pokud si naplním payload a odešlu ho přes
$this->sendPayload()
vše je ok, jenže pokud ukončím
presenter $this->redirect()
tak se payload kompletně přepíše
(i přesto, že jsem šel krok po kroku a přepisovat by se neměl, jak jde vidět ze screenu –
pokud jsem to pochopil správně, tak by se měl pouze doplnit o redirect, viz
zde)
Presenter:
protected function createComponentSearchForm(SearchFormFactory $factory)
{
return $factory->create(function($text) {
if ($this->isAjax()) {
$this->payload->ajaxRedirect = TRUE;
}
$this->redirect("Search:", ["search" => $text, "page" => NULL]);
});
}
Ajax extension:
<script>
// vypnu defaultní redirect extension, která je neajaxová
$.nette.ext("redirect", null);
$.nette.ext("ajaxRedirect", {
success: function (payload) {
console.log(payload);
// ! je schválně, protože ajaxRedirect je vždy false, protože chybí (to právě netuším proč..)
if (payload.redirect && !payload.ajaxRedirect) {
$.nette.ajax(payload.redirect);
}
else if(payload.redirect) {
window.location.href = payload.redirect;
}
}
});
</script>
V consoli vypadá payload
takto. 1. je POST požadavek, už zde chybí má proměnná
ajaxRedirect
, druhý je redirect.
Všechny redirecty mám tedy buď ajaxové nebo neajaxové, problém nastává ve chvíli, kdy je chci odlišit payloadem, protože ten protě mizí…
Nevím jestli je to feature, nějaký bug (ať už v js, ajaxu, nebo nette), nebo jsem nějakou prkotinu přehlédl… Budu velmi rád za jakýkoliv nápad co ještě zkontrolovat.
Pro jistotu, používám nette/nette 2.3.10, vojtech-dobes/nette.ajax.js@dev, vojtech-dobes/nette-ajax-history@dev