AJAX požadavek přenačítá stránku

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

Ahoj,

mám problém s AJAXovým požadavkem (signálem), navěšeným na odkazu, který mi ať dělam co dělám pořád přenačítá stránku. Jako obslužný skript používám nette.ajax.js, Nette mám ve verzi 2.2.0 instalovanou pomocí composeru.
Skripty mám nad </body>:

<script src="{$assetsJS}/modernizr.min.js"></script>
<script src="{$assetsJS}/bootstrap.min.js"></script>
<script src="{$assetsJS}/nette/netteForms.js"></script>
<script src="{$assetsJS}/nette/nette.ajax.js"></script>
<script src="{$assetsJS}/main.js"></script>

V main.js úplně na začátku volám:

jQuery(document).ready(function($) {
	// Init Nette ajax
	$.nette.init();
	...
}

Mým původním požadavkem bylo vytvořit Bootstrap modal s daty načtenými AJAXem (podle tohoto gistu), ale během asi 6hod hledání a zkoušení jsem zjistil, že mi nefunguje ani úplně obyčejný příklad AJAXové změny textové proměnné:

Presenter:

	/** @var string **/
	protected $test;

	public function renderDetail() {
		if ($this->test === NULL) {
			$this->test = 'Prvni test';
		}
		$this->template->test = $this->test;
	}

	public function handleTest() {
		$this->test = 'Druhy test';
		if ($this->isAjax()) {
			$this->invalidateControl('test');
		}
	}

detail.latte:

{block content}

{snippet test}
	{$test}
{/snippet}
<a n:href="test!" class="ajax">UPDATE</a>

Při kliknutí na odkaz jsem přesměrován na ...?do=test, signál se tedy neodesílá AJAXem.
V nette.ajax.js jsem si zkoušel v metodě ajax vypsat něco do konzole, abych zjistil, jestli se volá a text se vypsal. V konzoli jinak nemám žádné JS chyby. Přijde mi, jako by se nad odkazy .ajax nevolalo klasické event.preventDefault();.

Předem moc děkuji za všechny rady!

Etch
Člen | 403
+
+1
-

No minimálně jsem si nevšiml, že by si někde natahoval jQuery.

fronty
Člen | 16
+
0
-

Díky, zapomněl jsem uvést, jQuery tahám z CDN s fallbackam na vlastní skript hned nad modernizerem:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="{$assetsJS|noescape}/jquery.1.11.1.min.js"><\/script>')</script>

<script src="{$assetsJS}/modernizr.min.js"></script>
...

Při kódování pravidelně sleduji konzoli, kde by se absence jQuery projevila.

Editoval fronty (18. 11. 2014 1:04)

Etch
Člen | 403
+
0
-

Další věcí je, že minimálně u zde uvedené inicializace ti chybý ukončovací závorka.

jQuery(document).ready(function($) {
    // Init Nette ajax
    $.nette.init();
    ...
});

Zkoušel jsem výše uvedený kód na čistém sandboxu a po doplnění ukončovací závorky viz výše fungoval ajax zcela normálně.

Editoval Etch (18. 11. 2014 11:05)

fronty
Člen | 16
+
0
-

Díky moc za nakopnutí, nainstaloval jsem si čístý Sandbox a tam mi AJAX taky fungoval, začal jsem proto zkoumat skript krok po kroku a došel k tomu, že pro správnou funkčnost nesmí být zapnuty $absoluteUrls v BasePresenteru. AJAX včetně snippetů už mi funguje.