Ajax – ako zavolat metodu handleNieco cez javascript ?
#1 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Ajax – ako zavolat metodu handleNieco cez javascript ?
majme metodu
<?php
protected $pom;
public function handleinsert($pomocna)
{
$this->template->pom = $pomocna;
}
?>
kde handle je nakonfigurovany v BasePresentery
chcem zavolat na udalost onChange selectboxu call handler
skusala som uz vselico
<script>
$("#blabla").live("change", function() {
// tu mam zavolat
$.get(..blabla..);
alert({$pom});
return false;
} );
</script>
poradte nieco dik
#2 před 11 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
Ahoj, chápu to správně, že chceš po změně selectboxu dostat do
javascriptu proměnnou {$pom} ? Stačilo by to takhle?
public function handleInsert()
{
echo 'obsah proměnné $pom';
$this->terminate();
}
<script>
$("#blabla").live("change", function() {
$.get({link insert!}, function(data){
alert(data);
});
return false;
} );
</script>
Editoval xxxObiWan (10. 6. 2011 17:44)
#3 před 11 měsíci
- Mikulas Dite
- Nette guru

- Registrovaný: 18. 11. 2009
- Příspěvky: 803
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
Tak, nebo čistěji spíš
public function handleInsert($temp)
{
$this->sendResponse(Nette\Application\Responses\JsonResponse(array('temp' => $temp)));
}
$.get({link insert!, 'temp' => 'nejaka hodnota'}, function(response) {
alert(response.temp);
});
Editoval Mikulas Dite (10. 6. 2011 17:48)
#4 před 11 měsíci
- uestla
- Nette guru

- Registrovaný: 21. 8. 2009
- Příspěvky: 438
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
Tak, nebo čistěji spíš
protected $pom;
public function handleInsert()
{
$this->payload->pom = $this->pom;
$this->sendPayload();
}
<script>
$.get({link insert!}, function(payload) {
alert(payload.pom);
});
</script>
#5 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
zmeni sa vlastne hodnota pom ?
ked ju chcem vlozit do templatu ? do remennej $pom ?
ked to zavolam ok vojde dnu ale nenastavi tu premennu do pom .. iba ak vypisem
alert (payload.pom)
ale premenna $pom je stale rovnaka ked ju vypisem alert({$pom})
uestla napsal(a):
Tak, nebo čistěji spíš
protected $pom; public function handleInsert() { $this->payload->pom = $this->pom; $this->sendPayload(); }<script> $.get({link insert!}, function(payload) { alert(payload.pom); }); </script>
#6 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
ja skor potrebujem do premenne pom nieco vlozit a potom s nou pracovat na stranke
xxxObiWan napsal(a):
Ahoj, chápu to správně, že chceš po změně selectboxu dostat do javascriptu proměnnou
{$pom}? Stačilo by to takhle?public function handleInsert() { echo 'obsah proměnné $pom'; $this->terminate(); }<script> $("#blabla").live("change", function() { $.get({link insert!}, function(data){ alert(data); }); return false; } ); </script>
#7 před 11 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
maria288 napsal(a):
ja skor potrebujem do premenne pom nieco vlozit a potom s nou pracovat na stranke
To můžeš, ale protože ji získáš přes AJAX, dostaneš ji do proměnné
pom jen v javascriptu. PHP proměnné už jsou v té době dávno
vykreslené → HTML stránku tak můžeš měnit jen přes javascript.
Možná chceš něco takového?
<script>
$.get({link insert!}, function(data){
$('#selectMessage').html(data); //do divu s id="selectMessage" vloží získané data (např. zprávu "tento prvek si vybrat nemůžeš :-P")
});
</script>
Dokud neřekneš, na co to konkrétně potřebuješ, asi ti nikdo víc neporadí.
#8 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
jasne na zaklade toho co si vyberiem z comba, poslem vybrane id cez handler a nastavim nejaku premennu … a potom cez snippet zavolam invalidate snippet a zmenim vybrane veci do druheho comba
xxxObiWan napsal(a):
maria288 napsal(a):
ja skor potrebujem do premenne pom nieco vlozit a potom s nou pracovat na stranke
To můžeš, ale protože ji získáš přes AJAX, dostaneš ji do proměnné
pomjen v javascriptu. PHP proměnné už jsou v té době dávno vykreslené → HTML stránku tak můžeš měnit jen přes javascript.Možná chceš něco takového?
<script> $.get({link insert!}, function(data){ $('#selectMessage').html(data); //do divu s id="selectMessage" vloží získané data (např. zprávu "tento prvek si vybrat nemůžeš :-P") }); </script>Dokud neřekneš, na co to konkrétně potřebuješ, asi ti nikdo víc neporadí.
#9 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
mám pocit, že jí jde spíš o snippety:
...
$("#blabla").live("change", function(e) {
$.get({link insert!};
e.preventDefault();
});
...
...
public function handleInsert()
{
$this->value = 'new value';
$this->invalidateConotrol('div');
}
...
public function renderDefault()
{
$this->template->value = $this->value;
}
...
{snippet div}
{$value}
{/snippet}
...
edit: nezapomeň si nalinkovat jquery.nette.js
s doplňků…
Editoval 22 (11. 6. 2011 14:21)
#10 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
<?php
public function renderDefault()
{
$this->template->krajeid = $this->krajeid;
var_dump((object)$this->krajeid);exit;
}
public function handleSelectedKraj($id)
{
$this->krajeid =(object)$this->baseModel->getKraje($id);
$this->invalidateConotrol('selectKraj');
$this->sendPayload();
}
{snippet selectKraj}
<select name="reg_kraj" id="reg_kraj">
<option value="0">
</option>
{if isset($krajeid)}
{foreach $krajeid as $kraj}
<option value="{$kraj->id}">
{$kraj->nazov}
</option>
{/foreach}
{/if}
</select>
{/snippet}
?>
<script>
$(document).ready(function() {
$(‚#reg_stat‘).live(‚change‘,function(e) {
$.get({link SelectedKraj!, ‚id‘ ⇒ 1});
e.preventDefault();
alert({$krajeid})
} );
} );
</script>
22 napsal(a):
mám pocit, že jí jde spíš o snippety:
... $("#blabla").live("change", function(e) { $.get({link insert!}; e.preventDefault(); }); ...... public function handleInsert() { $this->value = 'new value'; $this->invalidateConotrol('div'); } ... public function renderDefault() { $this->template->value = $this->value; }... {snippet div} {$value} {/snippet} ...edit: nezapomeň si nalinkovat
jquery.nette.jss doplňků…
#11 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
nefunguje mi to ani s tymto .. netusim preco sa combo neprerenderuje
#12 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
protože sendPayload() ukončí presenter.. ale takhle bych to asi neřešil a navíc už je na to tu komponenta http://addons.nette.org/…entselectbox
#13 před 11 měsíci
- nanuqcz
- Nette guru

- Registrovaný: 4. 5. 2010
- Příspěvky: 615
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
Zakomentuj (odstraň) řádek
$this->sendPayload();
Tím ho odesíláš, ještě než se do $this->payload
stačí uložit obsahy invalidovaných snippetů. Neboj se, Nette pak ten
payload odešle za tebe automaticky.
#14 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
myslela som toto nejak nefunguje neprekresli sa mi snippet .. asi tam bude niekde chyba
<?php
public function handleSelectedKraj($id)
{
$this->krajeid =(object)$this->baseModel->getKraje($id);
$this->invalidateConotrol(‚selectKraj‘);
}
?>
#15 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
viete mi dat jednoduchy priklad na snippet … mne tu nic v tom nette nefunguje uz som zufala dik
#16 před 11 měsíci
#17 před 11 měsíci
#18 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
podívej se ve Firebugu, jestli probíha nějaký XHR požadavek.., pošli sem presenter a šablonu. nette.jquery.js máš zalinkované?
#19 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
musi to byt v bloku ?
{block content}
<a id=„blabla“ >aaaaaaaaa</a>
{snippet div}
{$value}
{/snippet}
{/block}
#20 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
mam nalinkovane, ziadna chyba nie je
22 napsal(a):
podívej se ve Firebugu, jestli probíha nějaký XHR požadavek.., pošli sem presenter a šablonu. nette.jquery.js máš zalinkované?
#21 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
no jistě, že to musí být v bloku a co ten požadavek?
Editoval 22 (11. 6. 2011 21:00)
#22 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
no jop ale aj tak hlasi chybu :
Fatal error: Uncaught exception ‚DibiDriverException‘ with message ‚Unknown column 'preklad_insert!‘ in ‚field list'' in C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php:856 Stack trace: #0 C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php(214): DibiMySqlDriver->query(‘?? …‚) #1 C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php(200): DibiConnection->nativeQuery(‘?? …‚) #2 C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php(754): DibiConnection->query(Array) #3 C:\xampp\htdocs\realvea_sk\app\models\BaseModel.php(189): dibi::fetchPairs(‘?? …‚) #4 C:\xampp\htdocs\realvea_sk\app\presenters\BasePresenter.php(118): BaseModel::getTranslations('insert!‘) #5 C:\xampp\htdocs\realvea_sk\libs\Nette\nette.min.php(1646): BasePresenter->startup() #6 C:\xampp\htdocs\realvea_sk\libs\Nette\nette.min.php(802): NPresenter->run(Object(NPresenterRequest)) #7 C:\xampp\htdocs\realvea_sk\app\bootstrap.php(53): NApplication->run() #8 C:\xampp\htdocs\realvea_sk\index.php(31): require(‚C:\xampp\htdocs…‘) #9 in C:\xampp\htdocs\realvea_sk\libs\dibi\dibi.min.php on line 856
#23 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
ja ani neviem co ti poslat, je to komplet projekt a .. mam pocit ze v nom niekde je chyba a asi si to treba vysusat na cistom projekte
22 napsal(a):
no jistě, že to musí být v bloku a co ten požadavek?
#24 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
a ano je tam poziadavok get
#25 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
aj na cistom projekte to padne na
Nette\Application\BadRequestException #404
#26 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
no ale ta chyba je z MySQL (neexistující sloupec
preklad_insert!), takže buď máš chbu v nějakém MySQL dotazu,
napřed prosím ověř funkci bez AJAXu a až pak přidej AJAX.
Edit: tak ze všeho nejdřív ti to ale musí fungovat aspoň první načtení presenter+šablona :-)
Editoval 22 (11. 6. 2011 21:16)
#27 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
no ten poziadavok je
GET
500
Internal Server Error
22 napsal(a):
no ale ta chyba je z MySQL (neexistující sloupec
preklad_insert!), takže buď máš chbu v nějakém MySQL dotazu, napřed prosím ověř funkci bez AJAXu a až pak přidej AJAX.Edit: tak ze všeho nejdřív ti to ale musí fungovat aspoň první načtení presenter+šablona :-)
#28 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
těžko říct, už jsem psal, aby jsi poslala presenter a šablonu, z tohodle se nic nepozná. Napřed musíš zajistit fungovaní toho MySQL dotazu nebo ho vyhoď, ať ti nekomplikuje život prozatím..
Editoval 22 (11. 6. 2011 21:24)
#29 před 11 měsíci
- maria288
- Člen

- Registrovaný: 6. 6. 2011
- Příspěvky: 43
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
layout
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="description" content="Nette Framework web application skeleton">
<meta name="robots" content="{$robots}" n:ifset="$robots">
<title>Nette Application Skeleton</title>
<link rel="stylesheet" media="screen,projection,tv" href="{$basePath}/css/screen.css" type="text/css">
<link rel="stylesheet" media="print" href="{$basePath}/css/print.css" type="text/css">
<link rel="shortcut icon" href="{$basePath}/favicon.ico" type="image/x-icon">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript" src="{$basePath}/js/jquery.nette.js"></script>
<script type="text/javascript">
$("a.ajax").live("click", function (event) {
event.preventDefault();
$.get(this.href);
});
</script>
</head>
<body>
{foreach $flashes as $flash}<div class="flash {$flash->type}">{$flash->message}</div>{/foreach}
@{include #content}
</body>
</html>
homePage.phtml
@{block content}
<a class="ajax" href="{link Insert!}">aaaaaaaaa</a>
{snippet div}
{$value}
{/snippet}
<div id="wrapper">
</div>
presenter Homepage
<?php
/**
* My Application
*
* @copyright Copyright (c) 2010 John Doe
* @package MyApplication
*/
class HomepagePresenter extends BasePresenter
{
public $value = "any value";
public function handleInsert()
{
$this->value = 'new value';
$this->invalidateConotrol('div');
}
public function renderDefault()
{
$this->template->value = $this->value;
}
public function handleLoadItems($id)
{
static $items = array(
'fruits' => array(
'Pear',
'Apple',
'Melon',
'Banana',
),
'vegetables' => array(
'Salad',
'Garlic',
'Onion',
'Carrot',
),
);
if(isset($items[$id]))
$this->template->items = $items[$id];
// else: Don't fill in anything
$this->invalidateControl('ajaxDemo');
}
}
a vypisuje GET http://localhost:8080/…cument_root/?… 500 (Internal Server Error)
Editoval maria288 (11. 6. 2011 21:33)
#30 před 11 měsíci
- 22
- Nette guru

- Registrovaný: 18. 1. 2010
- Příspěvky: 1424
Re: Ajax – ako zavolat metodu handleNieco cez javascript ?
kterou verzi Nette používáš? Jestli 2, tak zavináče už tam
nepatří.
Handler se volá s malým písmenem {link insert!}