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

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

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.

22
Člen | 1478
+
0
-

Proč si napřed nevyzkoušíš jednoduchý příklad z dokumentace??

Editoval 22 (7. 10. 2012 15:47)

slade183
Člen | 30
+
0
-

Vyhodí to chybu 500 Internal Server Error 100ms

nanuqcz
Člen | 822
+
0
-

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:

  1. Nejdřív vše naprogramovat tak, aby to fungovalo klasicky, bez javascriptů, ne-AJAXově.
  2. Teprv pak přidat AJAX.
slade183
Člen | 30
+
0
-

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 ?

Felix
Nette Core | 1196
+
0
-

To budes muset vyresit sam nastavenim offset a limit pri dotazu a pak to spojovat s puvodnimi clanky.

slade183
Člen | 30
+
0
-

Jo to me napadlo, ale nevím jak je připojit k puvodnim clankum. Kdys je to v cele ve snippet tak se to přepíše všechno .. No nějak to pořeším díky.