Vlastní data zmizí z payloadu při ajaxovém redirectu, co mi uniká?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Mikeš
Člen | 771
+
0
-

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

Jan Mikeš
Člen | 771
+
+1
-

Ok, tak jsem našel příčinu :-) zkoušel jsem to bez history js extension, ale samozřejmě mě nenapadlo vypnout history extension v configu – způsobují to handlery, které payload modifikují.

Teď ještě najít funkční řešení.