POST požadavek z AJAX na handle

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

Ahoj,

prosím o pomoc s propojení AJAXového požadavku z JQuery do handle v prezenteru. Našel jsem nějaké řešení, dokonce toho co přesně potřebuji, ale většinou šlo o věci staré alespoň 2 roky a nebo se řešení změnilo na odeslání GET.

Zkouším poslat z tohoto JavaScriptu:

<script>
...
$.ajax({
        type: 'POST',
        url: {link sort!},
        data: sortItem,
        error: function(){
               alert("Theres an error with AJAX.");
       }
});
</script>

A rád bych toto odchytil v resenteru:

<?php
/**
  * Sort article by order. Using JQuery.
*/
public function handleSort($item) {

  Nette\Diagnostics\Debugger::barDump($this->request); //post je prázdný
  Nette\Diagnostics\Debugger::barDump($_POST); //prázdné pole

  $list = $this->request->post;
  $this->articleRepository->sortArticle($list);
}
?>

Pokud zadán do adresního řádku správně adresu s do=sort, tak se metoda zavolá a snaží se cosi udělat. Bohužel, při odeslání z JavaScriptu Firebug ukazuje volání POST požadavku s hodnotami, ale metoda není vůbec volána. Jakmile vyměním POST za GET ve skriptu, tak se funkce zavolá.

Jak tedy poslat POST požadavek do presenteru? Díky moc za pomoc.

Etch
Člen | 403
+
0
-

To by mělo fungovat zcela normálně. Běžně používám cca následující

		$('#sort tbody').sortable({
			update: function(e, ui){
				$.nette.ajax({
					type: 'POST',
					url: $('#sort').data('update-method'),
					data: {'order': $(this).sortable('toArray')}
				});
			}
		});

v presenteru by se to pak mělo dát vytáhnout nejjednodušeji asi přes:

$this->context->httpRequest->getPost('order'); // Nezaručuji!!! Já to tahám až v komponentě.

Editoval Etch (20. 2. 2014 1:26)

David Matějka
Moderator | 6445
+
0
-

jakou pouzivas verzi nette? zkousel jsem tvuj priklad a fungoval mi ok

iskejp
Člen | 41
+
0
-

Ahoj, ano, děkuji. Již to funguje jak má. Nakonec jsem zjistil, že byl po cestě překlep. Díky za pomoc a reakce.

matej21 napsal(a):

jakou pouzivas verzi nette? zkousel jsem tvuj priklad a fungoval mi ok

kloban
Člen | 123
+
0
-

Ahoj,
chtěl bych se zeptat co znamená to „url: {link sort!},“. Respective nevím co mám zadat do URL aby mi to zpracoval konkrétní prezenter.

Jan Mikeš
Člen | 771
+
0
-

@kloban: {link sort!} je signal, ktery je zpracovavan na aktualnim presenteru pomoci handleSort() metody. Je to to same jako by jsi napsal

<a n:href="sort!">...</a>

Tu URL muzes vymenit za cokoliv jineho, kde ocekavas ajaxovy pozadavek