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 | 468
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 | 468
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.