AJAX požadavek přenačítá stránku
- fronty
- Člen | 16
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!
- fronty
- Člen | 16
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
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)