Předání objektu (položek z tabulky) z AJAX do presenteru

jedlicka
Člen | 61
+
0
-

Ahoj,

potřebuji předat seznam položek (JSON) z tabulky (dle filtru) do proměnné v presenteru.

V šabloně latte mám AJAX:

...
var data = table.rows({ filter : 'applied'}).data();
data = JSON.stringify(data);

$.nette.ajax({
	url: "?do=invoicesFilter",
	type: 'GET',
	data: { 'data': data},
	contentType: 'application/json;charset=UTF-8',
	success: function (result) {
		alert("OK");
	 },
	error: function (xhr, textStatus) {
		alert(textStatus + ':' + xhr.status);
	}
});

a v presenteru mám handle:

public function handleInvoicesFilter() {
   	$data=$this->getParameter('data');
   	$this->flashMessage($data);
}

Toto ale skončí s chybou 414.

Pokud v AJAXu změním data na:

data: { 'data': 'neco'},

Tak se v pořádku zavolá handleInvoicesFilter() a zobrazí se text neco (data se předají).

Jak předat JSON z AJAXu do presenteru? Co mám špatně, že se vyhodí 414?

Používám starší Nette 2.1.

Díky moc za každou radu.

Martin

CZechBoY
Člen | 3608
+
0
-

http 414 je chyba příliš dlouhá url – pošli to postem

jedlicka
Člen | 61
+
0
-

Vím, že 414 je příliš dlouhá URL a taky mě napadlo to poslat přes POST. To nehodí žádnou chybu (a je success), ale v handleInvoicesFilter() nevím, jak to načíst. Zkoušel jsem tři způsoby:

$data = $httpRequest->getPost('data');
$data = $this->getRequest()->getPost();
$data = $_POST['data'];

ale ani jedno nefunguje (nezavolá se), protože to vyhodí pro změnu chybu 500.

CZechBoY
Člen | 3608
+
0
-

Myslim si, že by to mělo spadnout automaticky do parametru metody jako při GET požadavku.

jedlicka
Člen | 61
+
0
-

Jasný, udělal jsem

public function handleInvoicesFilter($data) {
   $this->flashMessage($data);
}

ale vypíše se prázdný text, v datech nic není.

jedlicka
Člen | 61
+
0
-

Když udělám:

private $data;

public function handleInvoicesFilter($data) {
	$this->data = file_get_contents('php://input');
	$this->flashMessage($this->data);
}

tak se vypíše v tom handle obsah POSTu, ale zase v jiném handle (viz níže) mám proměnnou $this->data prázdnou:

public function handleExportInvoicesExcel() {
	$this->flashMessage($this->data);
}