Překreslení snippetu Ajaxem v intervalu
- Fyasko
- Člen | 106
Ahoj, pár dní už se potýkám s problémem. Snažím se pro rozšíření znalostí vytvořit chat v nette, ale ndaří se mi překreslit snippet bez refreshe stránky. Zkoušel jsem používat nette.ajax.js ale tam jsem byl uplně mrtvej.
teď mám toto
V tuto chvíli v layout.latte
<script type="text/javascript">
$(document).ready(
function() {
setInterval(function(){
$.ajax({
url: '?do=update'
})
}, 3000);
});
</script>
Presenter
<?php
public function renderDefault()
{
$this->template->value = rand(0, 1000);
}
public function handleUpdate()
{
echo $this->redrawControl('update');
}
?>
a v default.latte
{block content}
{snippet update}
{$value}
{/snippet}
{/block}
V networku prohlížeče vídím že Ajax proběhne a vrátí nový výsledek resp. v response přijde např.
{"state":[],"snippets":{"snippet--update":"256"}}
Ale snippet se ne a ne překreslit. Jsem začátečník, tak mě prosím neukamenujte :). Za jakoukoliv radu předem děkuji.
- Majkl578
- Moderator | 1364
Zkoušel jsem používat nette.ajax.js ale tam jsem byl uplně mrtvej.
To je asi dobrý začátek, je to totiž jediná použitelná client-side
knihovna na AJAX <3 Nette.
Paradoxně, nette.ajax.js je naprosto primitnivní na základní použití,
jediné, co je potřeba, je nalinkovat příslušný soubor a inicializovat. Viz stránka
doplňku.
$.ajax({ …
Tohle ti sice spustí AJAX požadavek, ale to je asi tak všechno. Je to základní funkce jQuery, kde nic jako snippet neexistuje. Musel by sis ještě dopsat success callback a v něm snippety ručně obnovovat.
Nevykládej si to nějak zle, ale nejspíš by nebylo od věci prvně zapracovat na znalostech Javascriptu/AJAXu.
- Fyasko
- Člen | 106
Nevykládám v pořádku :) … no v to nette.ajax.js jsem doufal, ale když jsem nahradil $.ajax za $.nette.ajax, tak mi to psalo v konzoli toto: Uncaught TypeError: undefined is not a function a chyba je na řádku 208 souboru nette.ajax.js.I přes toto všechno nevím proč :D Předpokládám že mi chybí nějaké parametry či co :D
Editoval Fyasko (8. 8. 2014 7:32)
- CZechBoY
- Člen | 3608
Dej si tam někde skrytej odkaz na překreslení snippetu. Používám to jako stránkování a nikomu to nevadí :D
<div n:snippet="chat">
...
<a class="ajax" id="refresh_chat" n:href="refresh! parameter1=value1">Obnovit</a>
</div>
<script>
setTimeout(function() {
$('#refresh_chat').click();
$('#refresh_chat').remove();
}, 1000);
</script>
Editoval CZechBoY (8. 8. 2014 11:50)
- iguana007
- Člen | 970
Fyasko napsal(a):
Nevykládám v pořádku :) … no v to nette.ajax.js jsem doufal, ale když jsem nahradil $.ajax za $.nette.ajax, tak mi to psalo v konzoli toto: Uncaught TypeError: undefined is not a function a chyba je na řádku 208 souboru nette.ajax.js.I přes toto všechno nevím proč :D Předpokládám že mi chybí nějaké parametry či co :D
Nejspíše si se snažil volat něco před tím, než si to na stránce inicializoval (viz. např.: http://stackoverflow.com/…t-a-function ). Zkus si přesunout Javascript soubory na konec stránky a jako poslední tam přidej vlastní JS soubor se svým Javascript kódem.
- Fyasko
- Člen | 106
CZechBoY: Problém je v tom že když to dělám na button, img nebo src s využitím nette.ajax.js, tak to neodesílá ajaxově ale reloadne to stránku :/. Když zase vynechám nette.ajax.js a nechám si jen jquery.js tak to ajaxem odešle ale přijde mi jen json a snippet se nepřekreslí :D
iguana007: Takhle to mám seřazený a inicializace je úplně na konci dokumentu nette.ajax.js. Je to špatně? Samozřejmě je to ze souboru layout.latte v blocku scripts před uzavřením body a html.
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script src="{$basePath}/js/nette.ajax.js"></script>
<script type="text/javascript">
$(document).ready(
function() {
setInterval(function(){
$.nette.ajax({
url: '?do=update'
})
}, 3000);
});
</script>