Odeslání formuláře pomocí AJAXu
- Vorel12
- Člen | 7
Zkouším odesílání formuláře pomocí ajaxu a tyto odeslaná data
z formuláře chci uložit do databáze, ale nějak se mi to nedaří
zprovoznit.
Bez ajaxová komunikace funguje jak má.
Blbé je, že jsem se nevypisuje žádná chyba, tak nevím kde může být problém.
Kód v presenteru
protected function createComponentNewMessagesForm() {
$form = new UI\Form;
$form->getElementPrototype()->class('ajax');
$form->addText('message')
->setRequired('Write message');
$form->addHidden("id_messages");
$form->addHidden("id_users_from")
->setValue($this->getUser()->getId());
$form->addHidden("id_rooms")
->setValue($this->id);
$form->addSubmit('send', 'Send');
$form->onSuccess[] = array($this, 'newMessagesFormSucceeded');
return $form;
}
public function newMessagesFormSucceeded(UI\Form $form, $values) {
$this->getModel()->createMessages($values);
if (!$this->isAjax()) {
$this->redirect('Chat:room');
} else {
$this->readrawControl('form');
}
}
jQuery
$("form.ajax").on("submit", function () {
$(this).ajaxSubmit();
return false;
});
$("form.ajax :submit").on("click", function () {
$(this).ajaxSubmit();
return false;
});
Šablona
<div>
{snippet form}
{control newMessagesForm}
{/snippet}
</div>
- igor.pocta
- Člen | 100
Máš tam knihovnu od Vojty? A máš její inicializaci? https://componette.org/…tte.ajax.js/
V prohlížeči můžeš použít vývojářské nástroje (jsou zpravidla v nabídce) a v záložce Network se podívat, zda to vůbec na pozadí komunikuje – pokud ne, problém bude na straně klienta. Pokud na straně serveru, v Response můžeš vidět chybu.
- Vorel12
- Člen | 7
igor.pocta napsal(a):
Máš tam knihovnu od Vojty? A máš její inicializaci? https://componette.org/…tte.ajax.js/
V prohlížeči můžeš použít vývojářské nástroje (jsou zpravidla v nabídce) a v záložce Network se podívat, zda to vůbec na pozadí komunikuje – pokud ne, problém bude na straně klienta. Pokud na straně serveru, v Response můžeš vidět chybu.
Knihovnu mám i inicializovanou. Když se dívám do záložky Network tak při odeslání formuláře se odešle GET požadavek, ale typ požadavku je html ne json neni v tom ten problém?
Přijde mi, že v případě kdy předám do formu třídu:
$form->getElementPrototype()->class('ajax');
tak pak že se vůbec nezavolá funkce newMessagesFormSucceeded(UI\Form $form, $values)
Editoval Vorel12 (21. 6. 2016 15:36)
- CZechBoY
- Člen | 3608
Pokud máš kod přesně jak si napsal, tak máš překlep v názvu volání
funkce redrawControl
správně takto:
public function newMessagesFormSucceeded(UI\Form $form, $values) {
$this->getModel()->createMessages($values);
if (!$this->isAjax()) {
$this->redirect('Chat:room');
} else {
$this->redrawControl('form');
}
}
Editoval CZechBoY (21. 6. 2016 15:41)
- Vorel12
- Člen | 7
CZechBoY napsal(a):
Pokud máš kod přesně jak si napsal, tak máš překlep v názvu volání funkce
redrawControl
správně takto:public function newMessagesFormSucceeded(UI\Form $form, $values) { $this->getModel()->createMessages($values); if (!$this->isAjax()) { $this->redirect('Chat:room'); } else { $this->redrawControl('form'); } }
Jo máš pravdu překlep tam mám, ale problém to nevyřešilo.
- Vorel12
- Člen | 7
CZechBoY napsal(a):
Tak si ještě vypiš errory jestli nevypisuješ…
$form->onError[] = function ($form) { dump($form->getErrors()); });
Nic nevypisuje, přijde mi, jakoby se prostě vůbec nezavolal ta metoda newMessagesFormSucceeded jakoby to skončilo na tom formuláři a dál se ty data nijak nepředají.