Odchytávání url skrze ajax v XHR

- iiMichal
 - Člen | 3
 
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
 
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 | 473
 
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
 
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 | 473
 
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
 
Ukázka daného presenteru je zde:
Jen jsou tam už nějaké části zakomentované.
Editoval iiMichal (31. 8. 2018 11:11)

- iiMichal
 - Člen | 3
 
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.