nefunkční ajax – zabránit přesměrování
- bluray
- Člen | 178
Dobrý den, mám problém s ajaxem. Mám nabídku zboží a po kliknutí na odkaz Přidat by se mělo objevit v nákupním košíku. Problém je v tom, že ajax se asi vůbec nespustí a místo toho se stránka přesměruje a funguje to jenom přes handler. nevím co dělám špatně, tady je kod:
default.latte:
<a n:href="add! id_zbozi=>$zbozi->id, nazev=>$zbozi->nazev, cena=>$zbozi->cena" class="ajax">Přidat</a>
<div class="kosik">
{snippet cart}
{if empty($items)}
Klikni na Přidat pro vložení zboží do košíku.
{/if}
<table>
{foreach $items as $item}
<tr>
<td>{$item[1]}</td>
<td>{$item[2]}</td>
</tr>
{/foreach}
</table>
<a href="">Sečíst</a>
{/snippet}
</div>
presenter:
private static $cart;
public function handleAdd($id_zbozi, $nazev, $cena){
self::$cart[] = array($id_zbozi, $nazev, $cena);
$this->template->items = self::$cart;
$this->redrawControl("cart");
}
public function renderAdd(){
if (! $this->isAjax()) {
$this->template->items = 'Prázdný košík';
}
}
V layoutu mám
<script type="text/javascript" src="{$basePath}/js/nette.ajax.js"></script>
<script type="text/javascript">
$(function () {
$.nette.init();
});
</script>
Kde dělám chybu? Stránka se vždy přesměruje a tím se mi statická proměnná $cart vynuluje takže mám vždy jenom jednu položku v košíku. děkuji za pomoc.
- iguana007
- Člen | 970
Ad Ajax – podívej se do konzole, příp. panelu network, zda-li se ti vše načítá a konzole nehlásí žádný JS error. Jakou verzi nette.ajax.js používáš?
Ad položky košíku – pokud tu proměnnou $cart ještě neproženeš přes nějaké storage (session, databáze atd.), tak se ti mezi requesty neuchová, proto tam máš vždy jen jednu položku (resp. žádnou).
- jiri.pudil
- Nette Blogger | 1032
Ad Ajax – verze je 1.2.2 do jaké konzole se mám podívat?
Do vývojářských nástrojů v prohlížeči.
Ad položky – takže nová instance presenteru se vytváří i při volání ajaxu?
Ano, pro každý HTTP request se spouští celá aplikace znovu.
- steelbull
- Člen | 241
<!-- Nette -->
<script
src=„http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js“
type=„text/javascript“></script>
<script type=„text/javascript“
src=„{$basePath}/js/nette.ajax.js“></script>
a potom v template:
<script>
$(function () {
$.nette.init();
});
</script>
- steelbull
- Člen | 241
Mysteria napsal(a):
A to přilinkování jQuery a AJAXu máš „výš“ než to $.nette.init(); v templatu? Předpokládám, že link na jQuery máš někde v @layout.latte.
jj, ano, presne tak jquery a nette.ajax linkujem v @layout a inicializujem nette.ajax uz priamo v template. Ale aj ked som to presunul do <header> pod loadovanie, aj tak to neslo.
Stale vypisovalo rovnaku chybu.