isAjax – je opravdu třeba?

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

Zdravím,
mam jednoduchou otázku, je třeba kontrolovat, zda je dostupný ajax pomocí isAjax() funkce?

Zkoušel jsem odeslat formulář bez kontroly, a prohližeč se refreshnul v pořádku. Tak uvažuji, zda je lepší použít kratší kód:

protected function createComponentContactForm()
{
    $form = $this->contactFormFactory->create();
    $form->onSuccess[] = function (Nette\Application\UI\Form $form)
    {
		$this->flashMessage('Zpráva byla odeslána', 'alert-success');
		$this->redrawControl('contact');
		$form->setValues([], TRUE); // clear form
    };

    return $form;
}

Místo delšího zápisu:

protected function createComponentContactForm()
{
    $form = $this->contactFormFactory->create();
    $form->onSuccess[] = function (Nette\Application\UI\Form $form)
    {
        $this->flashMessage('Zpráva byla odeslána', 'alert-success');

        if (!$this->isAjax())
        	$this->redirect('this');
	    else
	    {
	        $this->redrawControl('contact');
	        $form->setValues([], TRUE); // clear form
	    }
    };

    return $form;
}

Je už někde v jádru kontrola zavedená, nebo mi uniká, k čemu isAjax() funkce je?

Šaman
Člen | 2659
+
0
-

Desttro napsal(a):

Zkoušel jsem odeslat formulář bez kontroly, a prohližeč se refreshnul v pořádku.

Tak to zkus s vypnutými (nebo nenačtenými) scripty – tedy nasimulovat to bez AJAXu. Předpokládám, že se neprovede ten redirect, tedy zůstaneš na nebezpečné mezistránce (každý refresh znovu odešle formulář, nebo zkusí provést signál).

Desttro
Člen | 126
+
0
-

Šaman napsal(a):

Tak to zkus s vypnutými (nebo nenačtenými) scripty – tedy nasimulovat to bez AJAXu. Předpokládám, že se neprovede ten redirect, tedy zůstaneš na nebezpečné mezistránce (každý refresh znovu odešle formulář, nebo zkusí provést signál).

Právě že refresh proběhne v pořádku, i flashMessage „Zpráva byla odeslána“ se zobrazí nad formulářem.

Je pravda že Tracy neudělá redirect – možná se jedná o tu nebezpečnou mezistránku, jak píšeš

Bez Ajaxu:

S Ajaxem:

Editoval Desttro (5. 1. 2017 7:30)

Tharos
Člen | 1030
+
0
-

To volání redirect v případně ne-AJAXového requestu je implementace konceptu Post/Redirect/Get.

Silně doporučuji ten koncept ctít, přináší to spoustu výhod.