Předání objektu (položek z tabulky) z AJAX do presenteru
- jedlicka
- Člen | 70
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
- jedlicka
- Člen | 70
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.
- jedlicka
- Člen | 70
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);
}