Ajax, při zavolání handle vrátí 500
- m.himlar
- Člen | 15
Zduř, volám ajaxový požadavek při změně selectu, ale místo toho mi v consoli chromu vyskočí 500, když se podívám do logu, laděnka vypíše že nemá routu, přikládám kód …
použité nette 2.3
presenter:
public function handleAddCat($id)
{
if ($id) {
$this->tree = array(
'82' => 'category3',
'84' => 'category4',
'85' => 'category5'
);
}
$this['addCategoryForm']['parent_select']->setItems($this->tree);
$this->template->tree = $this->tree;
$this->redrawControl('categoryForm');
}
public function createComponentAddCategoryForm()
{
$form = new Form();
$form->addText('title', 'Název Kategorie')
->setRequired('Název Kategorie musí být vyplněn');
$form->addSelect('parent_select', 'Nadřazená kategorie')
->setPrompt('Vyber kategorii')
->setAttribute('class', 'kategorie ajax');
$form->addHidden('parent')
->setAttribute('class', 'parent');
$form->addSubmit('send', 'Ulož')
->setAttribute('class', 'btn btn-primary');
return $form;
}
latte:
{snippet categoryForm}
{control addCategoryForm}
{/snippet}
script v layout:
<script type="text/javascript">
$(document).ready(function(){
$('.kategorie').change(function(){
$('.parent').val($('.kategorie').val());
$.get({plink addCat!}, {"id": $(this).val()});
});
});
</script>
- Lukeluha
- Člen | 130
- používej ve vývojářských doplňcích záložku Network/Síť, tam
uvidíš přesně url, které se ajaxově volají a tam můžeš zkontrolovat,
jestli je url správná – handle by měl být ve
tvaru
aktualni-url&do=addCat
- opatrně na parametr pojmenovaný
id
, nejsem si jistý, jak je to v nových verzích nette, ale starší verze parametrid
používali pro identifikátor komponenty, takže se to mezi sebou může mlátit
- m.himlar
- Člen | 15
Díky za tipy, chyba byla opravdu v parametru handlu, tedy $id, přejmenováno na $catId a běží bez problému :)
každopádně handle se stejně neprovede, nebo se mi neinvaliduje snippet, ale nevím co z toho :-/
tak handle se provede, ale nerozumím, proč se neprovede invalidace snippetu :-/
{
"state":[],"snippets":{
"snippet--categoryForm":"\t\t80 - category1<br>\n\t\t81 - category2<br>\n
<form action=\"/admin/magazine/add-category\" method=\"post\" class=\"ajax\" id=\"frm-addCategoryForm\">\n\n
<table>\n
<tr class=\"required\">\n\t
<th>
<label for=\"frm-addCategoryForm-title\" class=\"required\">Název Kategorie</label>
</th>\n\n\t
<td>
<input type=\"text\" name=\"title\" id=\"frm-addCategoryForm-title\" required data-nette-rules='[{\"op\":\":filled\",\"msg\":\"Název Kategorie musí být vyplněn\"}]' value=\"81\" class=\"text\">
</td>\n
</tr>\n\n
<tr>\n\t
<th>
<label for=\"frm-addCategoryForm-parent_select\">Nadřazená kategorie</label>
</th>\n\n\t
<td>
<select name=\"parent_select\" class=\"kategorie\" id=\"frm-addCategoryForm-parent_select\">
<option value=\"\">Vyber kategorii</option>
<option value=\"82\">category3</option>
<option value=\"84\">category4</option>
<option value=\"85\">category5</option>
</select>
</td>\n
</tr>\n\n
<tr>\n\t
<th></th>\n\n\t
<td>
<input type=\"submit\" name=\"send\" class=\"btn btn-primary button\" value=\"Ulož\">
</td>\n
</tr>\n
</table>\n\n
<div>
<input type=\"hidden\" name=\"parent\" class=\"parent\" value=\"\">
<input type=\"hidden\" name=\"do\" value=\"addCategoryForm-submit\">
<!--[if IE]>
<input type=IEbug disabled style=\"display:none\">
<![endif]-->
</div>\n
</form>\n"
}
}
Editoval m.himlar (25. 4. 2015 20:15)
- Lukeluha
- Člen | 130
jj, jak říká @F.Vesely – použij nette.ajax.js. Tutoriál zde akorát pozor, odkaz na obslužný skript je špatně, ty chceš tento skript
- David Grudl
- Nette Core | 8218
Pokud máš routu ve tvaru
<presenter>/<action>/<id>
, musí být parametr id
součástí cesty, zatímco URL presenter/action?id=123
, kterou
vytváří $.get({plink addCat!}, {"id": $(this).val()});
, masce
neodpovídá a nezpracuje se.
Prostě odstraň <id>
z masky.