Javascript – propojeni aplikace s javascriptem
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Juve
- Člen | 27
Ahoj,
potřeboval bych získat data pomocí tohoto JS skriptu:
<script>
$.ajax({
url: '??',
success: function(data){
$('body').append( data.name )
.append( data.time );
},
dataType: 'json'
});
</script>
ze souboru „test.php“:
<?php
echo json_encode(array("name"=>"John","time"=>"2pm"));
?>
prostřednictvím aplikace NETTE a představuju si to asi nějak takto (asi je to blbe):
<?php
class MediatePresenter extends BasePresenter {
//put your code here
function startup() {
parent::startup();
$this->redirectUrl('test.php');
}
}
?>
Problém ale je, že nevím co napsat ve scriptu na místo URL: ‚??‘,
kdybych to nechtěl prohánět přes presenter, tak je to jednoduché a napsal
bych url: ‚test.php‘..
Prosím o radu, a jestli je vůbec tato moje myšlenka správná, už se
s tím pachtím dlouho.
Díky za pomoc
- nanuqcz
- Člen | 822
Ahoj,
pokud ti ty JSON data vrací nějaký soubor s jednoduchým PHP skriptem, tak
do latte šablony:
<script>
$.ajax({
url: {$basePath} + '/test.php', // Nette obsah $basePath automaticky uzavře do uvozovek
success: function(data){
$('body').append( data.name )
.append( data.time );
},
dataType: 'json'
});
</script>
V tomto případě žádný presenter nepotřebuješ.
Pokud ti ten JSON generuje presenter (což podle tvojí ukázky soudím, že ne), tak
<script>
$.ajax({
url: {link Mediate:json}, // zavolá MediatePresenter::renderJson() a přijme od něj data
success: function(data){
$('body').append( data.name )
.append( data.time );
},
dataType: 'json'
});
</script>
- nanuqcz
- Člen | 822
Netestováno, ale teoreticky by mělo jet :-)
class MediatePresenter extends BasePresenter {
function renderJson() {
if ($this->isAjax()) {
$this->payload->name = 'John';
$this->payload->time = '2pm';
} else {
# klasické renderování šablony
}
}
}