Ajax, při zavolání handle vrátí 500

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

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
+
0
-
  1. 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
  2. opatrně na parametr pojmenovaný id, nejsem si jistý, jak je to v nových verzích nette, ale starší verze parametr id používali pro identifikátor komponenty, takže se to mezi sebou může mlátit
m.himlar
Člen | 15
+
0
-

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)

F.Vesely
Člen | 369
+
0
-

Ty posles get na server, ale odpoved uz nijak nezpracujes. Nejlepsi bude, kdyz pouzijes nette ajax.

Lukeluha
Člen | 130
+
0
-

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

m.himlar
Člen | 15
+
0
-

děkuji pánové, mrknu na to

David Grudl
Nette Core | 8218
+
+2
-

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.