Jednoduchá komunikace mezi presenterem a jQuery
- mere.gee
- Člen | 54
Zdravím… Mám tabulku a v ní řádek, ze kterého získám hodnotu idnote, tu chci poslat metodě handleShowbody(idnote), která na základě toho argumentu vygeneruje text z databáze a pošle ho prezenteru na vykreslení. Mělo by to být primitivní, ale něco mi asi uniká…
Tady je, jak vypadá js:
$('table#notes tbody tr').click(function(event){
var idnote = $(this).children('td.grid-cell-idnote').text();
$.get({link showbody!, 'idnote' => idnote}, function(data){
$('div#ajaxtext').html(data);
});
});
Takhle vypadá handleShowbody:
public function handleShowbody($idnote)
{
return $this->notesTable->get($idnote)->note_body;
}
Jestli mám obalit ten div ajaxtext ve snippetui, invalidovat a jaký použít ajaxSetup nevím… Ale zkoušel jsem všechno možné bez úspěchu… Někdy se mi do toho divu přenese celá stránka, většinou nic… Díky za radu!
Editoval mere.gee (20. 7. 2013 15:01)
- Jan Tvrdík
- Nette guru | 2595
Pro začátek, tohle je blbost těžkého kalibru. Nemůžeš z PHP (Latte)
číst proměnnou idnote
definovanou v JS.
$('table#notes tbody tr').click(function(event){
var idnote = $(this).children('td.grid-cell-idnote').text();
$.get({link showbody!, 'idnote' => idnote}, function(data){
$('div#ajaxtext').html(data);
});
});
- mere.gee
- Člen | 54
Jan Tvrdík napsal(a):
Pro začátek, tohle je blbost těžkého kalibru. Nemůžeš z PHP (Latte) číst proměnnou
idnote
definovanou v JS.$('table#notes tbody tr').click(function(event){ var idnote = $(this).children('td.grid-cell-idnote').text(); $.get({link showbody!, 'idnote' => idnote}, function(data){ $('div#ajaxtext').html(data); }); });
Dobrá, a máš nějaký návrh, jak to vyřešit jinak? Může fungovat tohle?
$.get({link showbody!}, idnote).done(function(data){
$('div#ajaxtext').html(data);
});
Editoval mere.gee (20. 7. 2013 15:24)
- mere.gee
- Člen | 54
Etch napsal(a):
Nicméně by měli fungovat, pokud si ty data v handle nacpe do payloadu.
To dělám, a stejně nic.
public function handleShowbody()
{
$idnote = $this->getParameter('idnote');
$this->payload->body = $this->notesTable->get($idnote)->note_body;
$this->sendPayload();
}
$('table#notes tbody tr').click(function(){
var idnote = $(this).children('td.grid-cell-idnote').text();
var param = {
idnote: idnote
};
$.get({link showbody!}, param, function (payload) {
$('div#ajaxtext').html(payload.body);
});
});
- mere.gee
- Člen | 54
Tohle vypisuje UNDEFINED. URL adresa se nezmění, určitě se nepředává ten idnote. Ale proč?
$('table#notes tbody tr').click(function(){
var idnote = $(this).children('td.grid-cell-idnote').text();
$.ajax({
url: !{link Dashboard:showbody},
type: 'GET',
data: { 'idnote' : idnote },
success: function(payload){
$('#ajaxtext').html(payload.body);
alert(payload.body);
}
});
});
- llook
- Člen | 407
Znáš Developer Toolbar? V něm je záložka „network“ a tu když si otevřeš, tak uvidíš, co přesně ti javascript posílá za požadavky a co přesně server posílá zpět.
Takhle těžko říct, kde je chyba.
- mere.gee
- Člen | 54
llook napsal(a):
Znáš Developer Toolbar? V něm je záložka „network“ a tu když si otevřeš, tak uvidíš, co přesně ti javascript posílá za požadavky a co přesně server posílá zpět.
Takhle těžko říct, kde je chyba.
Firebug ukazuje, že se požadují správné parametry, ale vrací se celá stránka. Možná bych měl dodat, že ta hodnota parametru idnote je ve fb nějak divně formátovaná (odřádkování a spousta mezer)… Tady je screenshot. Tak jsem to ostripoval a pořád nic.
Editoval mere.gee (20. 7. 2013 18:34)
- llook
- Člen | 407
To vypadá, že vůbec neodkazuješ na signál.
Jestli tohle je s tím kódem ze 7. příspěvku, tak u něj vidím hned
dvě chyby na jednom řádku: url: !{link Dashboard:showbody},
Jednak neodkazuješ na signál a jednak to v javascriptu neguješ tím
vykřičníkem, takže hodnota „url“ bude false.
- mere.gee
- Člen | 54
Tak v logu jsem našel zprávu: Call to a member function get() on a non-object – laděnce se nelíbí řádek
$this->payload->body = $this->notesTable->get($idnote)->note_body;
notesTable ale definuji při akci, která předchází této, což je asi problém. Jak zařídím, aby byla notesTable (když použiju to sprosté slovo), alespoň v tomto kontextu, globální? Pomůže jí definovat jako persistentní parametr?
- mere.gee
- Člen | 54
llook napsal(a):
To vypadá, že vůbec neodkazuješ na signál.
Jestli tohle je s tím kódem ze 7. příspěvku, tak u něj vidím hned dvě chyby na jednom řádku:
url: !{link Dashboard:showbody},
Jednak neodkazuješ na signál a jednak to v javascriptu neguješ tím vykřičníkem, takže hodnota „url“ bude false.
To už jsem opravil ;) Odkazuji na akci. Když tam dám handle, tak to křičí Component with name ‚Dashboard‘ does not exist. Je to presenter.
Editoval mere.gee (20. 7. 2013 18:51)