Form se s ajaxem nesubmitne, bez ajaxu vše funguje

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

Zdravim,

potřeboval bych nějak poradit. Snažim se zajaxovat formulář a bez ajaxu se formulář bez probmému submitne, ale s ajaxem se submit vůbec nezavolá.

používám nette.ajax.js, a u sebe ho akorát zinituju

Ajax mi vyhodí tenhle odkaz: type%5B%5D=1&type%5B%5D=4&price=0&foodQuantity=0&do=chooseFoodsForm-chooseFoods-submit&send=Vybrat&

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

	...

    foreach($sliders as $key => $slider) {
        $form['price'] = new \CustomForms\Slider($slider, $key, $priceValues);
    }
    $form->addCheckboxList('type', 'Kategorie', $types);
    $form->addSelect('foodQuantity', 'Počet jídel', [3,6,9]);
    $form->addSubmit('send', 'Vybrat');

    $form->onSubmit[] = $this->chooseFoodsSubmit;

    return $form;
}

public function chooseFoodsSubmit($values, $form) {

	...

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

Díky

Šaman
Člen | 2659
+
0
-

Ten odkaz je nejspíš dobře, takže AJAX nejspíš funguje. Jak se pozná, že ten formulář nefunguje?

Jestli je to kvůli tomu, že ti ve formuláři zůstávají hodnoty, tak je nutné před redrawControl dát ještě nastavení nových (prázdných) hodnot $form->setValues([], TRUE);

Clawiste
Člen | 2
+
0
-

No, jelikož ať tam dělám co tam dělám tak se nic neděje, když tam nechám jen samotnej $this->redirect('this'); bez kontroly jestli to je ajax či ne tak se nic nestane, a když tam přidám to $form->setValues([], TRUE); tak hodnoty zustanou vyplněný… Můžu klidně zavolat i neexistující funkci a žádnej error mi to nehodí (po odeslání formuláře).

Šaman
Člen | 2659
+
0
-

To ti nevyhodí – AJAX se ladí trochu složitěji. Ta stránka už je vykreslená a AJAXový požadavek probíhá na pozadí, takže neočekávej klasickou laděnku v okně prohlížeče. Když je chyba v ajaxovém requestu, tak prostě přijde nová (třeba chybová) stránka a AJAX jen zkontroluje, jestli obsahuje správné snippety. Pokud ne, tak nic nepřekreslí (není čím).

Nicméně ty stránky se normálně logují – podívej se do adresáře /log, měly by tam být html soubory pro každý druh chyby (při opakování už uložené chyby se nový soubor nevytváří – je nutné nejprve promazat logy).

Václav Kraus
Člen | 77
+
0
-

Ajax se ladí pěkně nepěkně.

Doporučuji do Firefoxu doplněk FireLogger. Sám o sobě umí zobrazovat chyby při Ajaxových požadavcích.

Pokud to potřebuješ podrobněji, tak se přes to dají i dumpovat proměnné, viz https://tracy.nette.org/en/#…

Editoval Václav Kraus (27. 12. 2015 16:05)

F.Vesely
Člen | 369
+
+1
-

Ja bych zase doporucil nainstalovat si IDE, Xdebug a prestat ladit pres dump. Tady je peknej clanek pro PhpStorm.