Muj prvni ajax priklad -přesměrovává se na novou url

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

Zdravím,

začal jsem se učit ajax v nette a nevím si rady proč mně tento příklad nefunguje.

presenter

public function handleTryAjax(){
    $this->ajaxPokus = "Zmeneny text";

    if($this->isAjax()){
        $this->redrawControl('pokus');
    }
}

šablona

<a class="ajax" n:href="tryAjax!">Change</a>

{snippet pokus}
    {$ajaxPokus}
{/snippet}

    <script>
        $(function(){

            $('a.ajax').live('click',function(){
                $.get(this.href);
                return false; // aby se nepreslo na novou adresu
            });
        });
    </script>

K tomu mam v head layout.latte nalinkovanou knihovnu https://componette.org/search/?…

Nevím co je tam špatně. Pořád to funguje jako přesměrování na novou stránku, kde se text změní, ale já chci aby to šlo ajaxově.

David Matějka
Moderator | 6445
+
0
-
  1. $this->template->ajaxPokus
  2. radeji pouzij nette.ajax.js
Jan Suchánek
Člen | 404
+
0
-

Jinak místo return false; můžeš používat http://api.jquery.com/…ventdefault/

<script>
    $(function(){
        $('a.ajax').on('click',function( event ){
				event.preventDefault();
				$.get(this.href);
        });
    });
</script>
ondrej256
Člen | 186
+
0
-

matej21 napsal(a):

  1. $this->template->ajaxPokus
  2. radeji pouzij nette.ajax.js

Dal jsem se tedy raději na cestu dle bodu 2. Našel jsem příklad zde na stránkách

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

Ale chová se to uplně stejně. Po kliknutí na odkaz se načte nová stránka.

šablona

    <script type="text/javascirpt">

        $(function () {
            $.nette.init();
        });

    </script>

<div id="content">
    {snippet ajaxChange}
        {$anyVariable}
    {/snippet}

    <a n:href="changeVariable!" class="ajax">Change variable!</a>
</div>

presenter

/** @var string */
private $anyVariable;


public function handleChangeVariable()
{
    $this->anyVariable = 'changed value via ajax';
    if ($this->isAjax()) {
        $this->invalidateControl('ajaxChange');
    }
}

layout.latte

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="//code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" href="{$basePath}/js/nette.ajax/nette.ajax.js"></script>

Mám to naprosto stejně jak je v tom příkladu

jiri.pudil
Nette Blogger | 1029
+
0
-

Ve <script> je src, ne href.

Jan Suchánek
Člen | 404
+
0
-

Nepoužívej:

	$this->invalidateControl('ajaxChange');

používej

	$this->redrawControl('ajaxChange');
ondrej256
Člen | 186
+
0
-

jiri.pudil napsal(a):

Ve <script> je src, ne href.

Díky, už jsem fakt nevěděl co s tím a byla to taková prkotina, sám bych na to snad nikdy nepřišel :D