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
        }
    }
}