restoreRequest() pri AJAX odeslání

- Chbox
 - Člen | 125
 
jak na restoreRequest při Ajax požadavku? Jedná se o klasiku, login
formulář.
zkoušel jsem tady z fora:
try {
        $this->getApplication()->restoreRequest($this->getParam('backlink'));
} catch (ForwardingException $e) {
        $httpRequest = Environment::getHttpRequest();
        $uri = $this->getApplication()->getRouter()->constructUrl($e->getRequest(), $httpRequest);
        $this->redirectUri($uri);
}
místo:
	$this->getApplication()->restoreRequest($this->getParam('backlink'));
	$this->redirect('Homepage:');
..bohužel to žadnou vyjímku nevyhodí. :-(
Editoval Chbox (10. 2. 2011 2:26)

- Jan Tvrdík
 - Nette guru | 2595
 
A jak si představuješ, že to bude fungovat? Na straně klienta to máš naskriptované správně?

- Jan Tvrdík
 - Nette guru | 2595
 
restoreRequest funguje při ajaxovém požadavku naprosto
stejně, jako při normálním.

- Jan Tvrdík
 - Nette guru | 2595
 
A obslužný kód na straně klienta pozná, že se má redirectovat?
Pomocí PHP nic takového nelze vnutit. Aby ti fungoval ajaxový redirect, tak
si musíš v payloadu před informaci o tom, že se má redirectovat a kam se
má redirectovat a obslužný kód pak musí zajistit změnu
location.href.
Editoval Jan Tvrdík (9. 2. 2011 17:42)

- Chbox
 - Člen | 125
 
..jak to tedy upravit na klientské časti, aby to fungovalo stejně jako bez
AJAX submitu?
Tohle bez ajaxu funguje správně:
$this->getApplication()->restoreRequest($this->getParam('backlink'));
$this->redirect('Homepage:');
s ajaxem se akorat vrátí v odpovědi správný obsah, ale k restoreRequest nedojde.

- uestla
 - Backer | 799
 
Stejný problém teď řeším ve verzi 2.0b, jen nevím, zda jdu na to správně… ?
- v nové verzi se při 
restoreRequest()volásendResponse() - v tom se nastavuje
	response (čili 
ForwardResponses requestem, na jehož URL chceme přesměrovat) a cyklus se ukončuje- tím pádem jediná výjimka, kterou můžu chytat, je 
AbortException - těžko se pak ale např. z přihlašovací komponenty dostanu k response, který byl právě presenteru nastaven
 
 - tím pádem jediná výjimka, kterou můžu chytat, je 
 
Čili jsem se zatím dopracoval k následujícímu, nicméně kvůli již zmíněné nepřístupnosti k response to nefunguje:
// jedná se o komponentu, následující kód je uvnitř metody volané onSuccess
try {
	$presenter->application->restoreRequest( $presenter->backlink );
} catch (Nette\Application\AbortException $e) {
	// $presenter->response->request by mě měl dostat k requestu uloženému v session
	$presenter->redirectUrl( $presenter->context->router->constructUrl( $presenter->response->request, $presenter->context->httpRequest->getUrl() ) );
}
					Editoval uestla (6. 7. 2011 13:07)

- uestla
 - Backer | 799
 
Ještě se tedy jen zeptám, zda to kdokoli ze zde diskutujících, či kdokoli jiný (klidně i kolemjdoucí) zkoušel a úspěšně vyřešil?
Jen shrnu:
- AJAXový formulář
 - v 
onSuccesseventu volatrestoreRequest() - následné přesměrování (při použití https://componette.org/search/?… je to zautomatizováno)
 
Předem děkuji za odezvu.