Odeslání formuláře přes AJAX – JSON odpověď není aktuální
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- joe
- Člen | 313
Ahoj,
mám problém s překreslováním snippetů a nevidím nic, co bych měl špatně. Díval jsem se na fórum i na tutoriály a měl bych mít doufám všechno tak, jak by mělo být (?)
TestPresenter.php
<?php
public function actionDefault($id) {
$this->template->items = dibi::query('select * from [test]')->fetchAll();
}
public function createComponentFormAdd() {
$form = new AppForm;
$form->getElementPrototype()->class('ajax');
$form->addText('text', 'Text:');
$form->addSubmit('send', 'Odeslat');
$form->onSubmit[] = callback($this, 'formAddSubmitted');
return $form;
}
public function formAddSubmitted(AppForm $form) {
dibi::query('insert into [test]', $form->getValues());
$this->flashMessage('Ulozeno');
if($this->isAjax()) {
$this->invalidateControl('items');
$this->invalidateControl('form');
$form->setDefaults(array(), TRUE);
} else {
$this->redirect('this');
}
}
?>
default.latte
@{block content}
{snippet items}
{foreach $items as $item}
{$item->text}<br>
{/foreach}
{/snippet items}
{snippet form}
{control formAdd}
{/snippet form}
V hlavním layoutu vkládám obsah šablon
@{include #content}
Zavináče asi už nějsou potřeba (?) – zkoušel jsem to i bez nich, stejný výsledek.
Mám Nette 2.0-alpha2 pro PHP 5.2
Formulář se odešle pomocí AJAXu, do DB se uloží nový záznam, ale ve vrácených datech (json) mám data bez právě vloženého záznamu. Ve formuláři zůstává vyplněné políčko. Po znovuodeslání formuláře dojde k přesměrování a ve výpisu se objeví dva nové záznamy.
Nevíte kde by mohl být problém nebo co mám špatně?
Díky moc
Editoval joe (6. 1. 2011 18:00)
- bojovyletoun
- Člen | 667
- ano, data máš načítat v render, protože signál(vložení dat) následuje po akci a před renderem. Předtím stránka fungovaloa takto: načetl jsi data z databáze do šablony a pak jsi uložil nový záznam. Více zde:„https://doc.nette.org/cs/application/presenters“
- form nějak restej, myslím, ž není nutná invalidace, ale po odeslání ajaxsubmi() volat něco jako reset()
- nejspíš voláš
$(form .ajax). live(click, function (){...ajaxsubmit()});
jenže když ten form refreshuješ pomocí snippetu, tak se vazba live přeruší… Hledej na foru, použij plugin livequery