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
+
0
-

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
+
0
-

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>
Juve
Člen | 27
+
0
-

Mohl by jsi mi prosím tě napsat ještě tu metodu renderJson() u toho druhého případu? :)
Děkuji

nanuqcz
Člen | 822
+
0
-

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

}

https://doc.nette.org/…ication/ajax

Juve
Člen | 27
+
0
-

jj, už jsem to pochopil, díky za pomoc ;)