Vygenerování pouze JSON response
- potapnik
- Člen | 127
Ahoj všem :-)
Snažím se pochopit jak funguje ajaxový response v Nette. Chci použít na stránkách Open Flash Chart, kterému bych rád podstrčil nějaká data. OFC umí přijmout jako parametr JSON data, bingo! Jenže jak v presenteru Nette napsat takovou action, aby vždy vygenerovala pouze JSON response? Nemám nikde žádný snippet a chtěl bych to vyřešit nějak líp než
<?php
echo $json;
die();
?>
Což je aktuální stav, jak to dělám. Ale vím, že Nette definuje JsonResponse, takže by to mělo jít nějak systémově, že :-) předem díky.
- Foowie
- Člen | 269
V action/render metodě zavoláš $presenter->sendResponse a předáš mu jako parametr JsonResponse . Tomu do konstruktoru podstrčíš pole hodnot, které se má odeslat.
- Filip Procházka
- Moderator | 4668
když už tak né sendResponse
, ale když posíláš
payload tak
$this->sendPayload();
:)
- potapnik
- Člen | 127
Nakonec jsem na to přišel je to čistší, ALE dost mě omezuje a otravuje, že nejde přistupovat přímo k this.payload, musím mu jednotlivé pod-objekty manuálně přiřazovat, tj. nelze
<?php
$this->payload = $mujobjekt;
$this->sendPayload();
?>
ale musim:
<?php
$this->payload->elements = $mujobjekt->elements;
...
$this->sendPayload();
?>
Ze zdrojáků a z výpisu Laděnky jsem pochopil, že payload lze jenom číst, není na něj setter, nějak nemůžu z logiky věci pochopit, proč není defaultně modifikovatelnej…
- Filip Procházka
- Moderator | 4668
protože má kvůli nette.jquery.js
zavedenou určitou
strukturu, když odpoví, aby to ten script dokázal správně spracovat, svoje
data si dej do nějaké proměnné
$this->payload->data = $data;
klídeček :) nebo budeš mít pocuchané nervy, vždyť je to jedno jestli posíláš jenom data, nebo je tam o zanoření víc.
A nebo použij sendResponse
, pokud ti to velicemoc vadí
$this->sendResponse(new JsonResponse($mujObjekt));
Editoval HosipLan (20. 1. 2011 20:30)
- potapnik
- Člen | 127
No ono jde o to, že dělám wrapper pro Open Flash Chart, který bere jako vstupní data celý objekt, ale díky za objasnění, už to chápu, nějak jsem akorát neviděl důvod, teď už na světě je :-)
sendResponse je OK, vlastně jsem ho během ohejbání OFC použil, ale teď jsem na něj nějak pozapomněl…