Nefungje ajax po kliknuti na odkaz se nic nestane
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- slade183
- Člen | 30
Dobrý den,
S nette začínám, a už si asi hodinu lámu hlavu s ajaxem, který mi
prostě nejde..
{block content}
{snippet}
{foreach $article as $article}
<div class="articletop"></div>
<div class="articlecenter">
<div class="article">
<h2>{$article->title}</h2>
<div class="line"></div>
<div class="text">
{!$article->text}
</div>
<div class="line"></div>
<div class="socialcomment">
<table>
<tr>
<td width="210" align="left">twiter facebook apodobne</td>
<td width="209" align="right">comment</td>
</tr>
</table>
</div>
<div class="articlelogo"></div>
</div>
</div>
<div class="articlebottom"></div>
{/foreach}
{/snippet}
<!-- old articles -->
<div class="articletop"></div>
<div class="articlecenter">
<div id="old">
<a href="oldArticle" class="oldarticle ajax"></a>
</div>
</div>
<div class="articlebottom"></div>
{includeblock 'right.latte'}
{/block}
A v presenteru mám:
public function renderDefault()
{
$this->template->article = $this->articleRepository->findArticle(2);
}
public function handleOldArticle()
{
$this->template->article = $this->articleRepository->findArticle(4);
if ($this->isAjax()) {
$this->invalidateControl();
}
}
Java soubor mám v hlavičce a obsahuje:
jQuery.ajaxSetup({
cache: false,
dataType: 'json',
success: function (payload) {
if (payload.snippets) {
for (var i in payload.snippets) {
$('#' + i).html(payload.snippets[i]);
}
}
}
});
// odesílání odkazů
$('a.ajax').live('click', function (event) {
event.preventDefault();
$.get(this.href);
});
Editoval slade183 (7. 10. 2012 15:16)
- nanuqcz
- Člen | 822
Co říká Firebug a jeho záložka console, když načtete stránku a klikáte na nějaký ajaxový odkaz?
Měly by se tam ukazovat ajaxové requesty i odpovědi na ně, případné chyby v javascriptu apod.
- nanuqcz
- Člen | 822
slade183: Aha, už to vidím. Odkaz
<a href="oldArticle" class="oldarticle ajax"></a>
asi nebude správně.
Zkus se řídit postupem při tvorbě AJAXových aplikací v Nette:
- Nejdřív vše naprogramovat tak, aby to fungovalo klasicky, bez javascriptů, ne-AJAXově.
- Teprv pak přidat AJAX.
- slade183
- Člen | 30
Tak už mi to funguje
V latte mam ted:
{* This is the welcome page, you can delete it *}
{block content}
{snippet article}
{foreach $article as $article}
<div class="articletop"></div>
<div class="articlecenter">
<div class="article">
<h2>{$article->title}</h2>
<div class="line"></div>
<div class="text">
{!$article->text}
</div>
<div class="line"></div>
<div class="socialcomment">
<table>
<tr>
<td width="210" align="left">twiter facebook apodobne</td>
<td width="209" align="right">comment</td>
</tr>
</table>
</div>
<div class="articlelogo"></div>
</div>
</div>
<div class="articlebottom"></div>
{/foreach}
{if $oldnum!=$radku+1}
<!-- old articles -->
<div class="articletop"></div>
<div class="articlecenter">
<div id="old">
<a href="{link default, ol => $oldnum}" class="oldarticle ajax"></a>
</div>
</div>
<div class="articlebottom"></div>{/if}
{/snippet}
{includeblock 'right.latte'}
{/block}
A v presenteru
public function renderDefault()
{
//zjistime kolik ma radku
$this->template->radku=$this->articleRepository->countArticle();
if ($this->isAjax()) {
$this->template->oldnum=$this->getParam('ol')+1;
$this->template->article = $this->articleRepository->findArticle($this->getParam('ol'));
$this->invalidateControl('article');
}else{
$this->template->article = $this->articleRepository->findArticle(2);
$this->template->oldnum=3;
}
}
Akorát se načítají články vždy znovu z databáze nejlěpší by bylo, aby se přinačetl k těm existujícím vždy 1. To se bude muset nastavit v latte ve snipetech asi že ?