Překreslení snippetu Ajaxem v intervalu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Fyasko
Člen | 106
+
0
-

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

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

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

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

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

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>
Mysteria
Člen | 797
+
+1
-

Nette.ajax.js: Dependencies: jQuery 1.7
Nebude to tím?

Fyasko
Člen | 106
+
0
-

Bože, hlavně že je to hned pod nadpisem napsaný :/. Musím vypadat jako *****, ale pokud bude chyba jen zde tak děkuju za pomoc :)

Edit: Jako že bylo. Skvěle, děkuji ještě jednou. Sám bych si toho nejspíš nevšiml :)

Editoval Fyasko (8. 8. 2014 18:12)

CZechBoY
Člen | 3608
+
0
-

Btw já tam mám class=ajax takže by to mělo jet ajaxově.