Odchytávání url skrze ajax v XHR

iiMichal
Člen | 3
+
0
-

Zdravím,

možná tu tenhle požadavek či otázka už byla a já projel snad všechny vláka týkající se podobnému problému, ale k věci.

Jde mi o to, že se mi v konzoli XHR nezobrazuje stav odeslaného formuláře. Zkoušel jsem to pro obyčejné tlačítko a to jede bez problému.
Zkoušel jsem také vložit třídu k $form i k samotnému submitu, ale bez úspěchu.

public function createComponentTest()
    {
        $form = new Form;
        $form->getElementPrototype()->class('ajax');

        $form->addText('test', 'test')->setAttribute('class', 'ajax');
        $form->addSubmit('send', 'odeslat')->setAttribute('class', 'ajax');
        $form->onSuccess[] = function($form, $values) {

            $this->template->test = $values->test;
            $this->redrawControl('test');

        };

        return $form;
    }



    public function handleTest()
    {

        if (!$this->isAjax()) {
            $this->redirect('this');
        }
        $this->redrawControl('test');
    }

Samozřejmě jsem přidal i snippet viz níže pro kontrolu atd. Ale jde mi převážně o XHR. Vše mám nalinkované správně co se týká netteAjax.js.

{snippet test}
		promenna z formulare ma hodnotu {isset($test) ? $test : 'zatim nic'}
	{/snippet}
	{form test class => 'ajax'}
		{input test}
		{input send}
	{/form}

Budu rád, za každou vaši radu.

Díky

Ondřej Kubíček
Člen | 494
+
0
-

máš tam zbytečně moc class ajax, stačí ti jedna na <form>, ke všemu ji nastavuješ v php i v šabloně, ale tím to samozřejmě není…

metoda handle* je zbytečná, u formu nic nehandluješ

musíš si to předat v render* metodě

něco jako

public function renderDefault()
{
		$this->template->test = '';

		if ($this->isAjax()) {
			$this->template->test = $this['test']['test']->getValue();
		}
}

jak máš všude test, tak je to dost zmatečný $this['test']['test'] první test je název formu, druhý input

Kcko
Člen | 468
+
0
-

Ondřej Kubíček napsal(a):

máš tam zbytečně moc class ajax, stačí ti jedna na <form>, ke všemu ji nastavuješ v php i v šabloně, ale tím to samozřejmě není…

metoda handle* je zbytečná, u formu nic nehandluješ

musíš si to předat v render* metodě

něco jako

public function renderDefault()
{
		$this->template->test = '';

		if ($this->isAjax()) {
			$this->template->test = $this['test']['test']->getValue();
		}
}

jak máš všude test, tak je to dost zmatečný $this['test']['test'] první test je název formu, druhý input

Ten kód je z části můj, kdy jsem nezkušenému kolegovi pomáhal. Nevím proč, ale prostě formulář nefunguje, nette.ajax i Nette je aktuální, XHR požadavek fungují krom formulářů (ten vždy jen refreshne), nepřišel jsem na to proč.

Ondřej Kubíček
Člen | 494
+
0
-

jo takhle…
divný, stačí přidat class ajax na form a zavolat $.nette.init() což předpokládám máte, možná by pomohla celá ukázka

Kcko
Člen | 468
+
0
-

Ondřej Kubíček napsal(a):

jo takhle…
divný, stačí přidat class ajax na form a zavolat $.nette.init() což předpokládám máte, možná by pomohla celá ukázka

nette.init tam je, já jsem to s ním řešil během pracovního dopoledne a ještě přes TeamViewer, takže nevylučuji, že jsem něco přehlídnul, ale principiálně jakýkoliv formulář prostě ajaxove nefunguje, klasické odkazy s třídou ajax + odkaz na handle v pohodě.

iiMichal
Člen | 3
+
0
-

Ukázka daného presenteru je zde:

Zde je Admin presenter

Jen jsou tam už nějaké části zakomentované.

Editoval iiMichal (31. 8. 2018 11:11)

rkor
Člen | 62
+
+2
-

Nechybí náhodou netteForms.js?
https://github.com/…s/issues/148

iiMichal
Člen | 3
+
0
-

rkor napsal(a):

Nechybí náhodou netteForms.js?
https://github.com/…s/issues/148

Ano, už jsem našel příčinu a vše to tím vyřešilo. Děkuji mnohokrát.