Odeslání formuláře pomocí AJAXu

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

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
+
0
-

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.

CZechBoY
Člen | 3608
+
+1
-

Ten jquery kod neni vubec potreba pokud pouzivas oznaceni pres tridu ajax.

Vorel12
Člen | 7
+
0
-

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
+
0
-

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
+
0
-

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.

CZechBoY
Člen | 3608
+
0
-

Tak si ještě vypiš errory jestli nevypisuješ…

$form->onError[] = function ($form) {
	dump($form->getErrors());
});
Vorel12
Člen | 7
+
0
-

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

Vorel12
Člen | 7
+
0
-

Tak dobrý už jsem to opravil, chyba byla v tom jQuery (a je pravda že tam ani nemusí být). Dík.