nefunkční ajax – zabránit přesměrování

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

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

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).

bluray
Člen | 178
+
0
-

Ad Ajax – verze je 1.2.2 do jaké konzole se mám podívat?
Ad položky – takže nová instance presenteru se vytváří i při volání ajaxu?

jiri.pudil
Nette Blogger | 1032
+
0
-

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.

iguana007
Člen | 970
+
0
-

bluray napsal(a):

Ad Ajax – verze je 1.2.2 do jaké konzole se mám podívat?
Ad položky – takže nová instance presenteru se vytváří i při volání ajaxu?

Ve většině prohlížečů spustíš vývojařské nástroje pomocí zkratky Crtl+Shift+I

bluray
Člen | 178
+
0
-

Tak mi to hlásí tohle:
Uncaught TypeError: Cannot read property ‚init‘ of undefined
Failed to load resource: the server responded with a status of 500 (Internal Server Error)

jiri.pudil
Nette Blogger | 1032
+
0
-

jQuery (>= 1.7) tam máš?

Onda
Člen | 20
+
0
-

bluray napsal(a):

Tak mi to hlásí tohle:
Uncaught TypeError: Cannot read property ‚init‘ of undefined
Failed to load resource: the server responded with a status of 500 (Internal Server Error)

Includuješ knihovnu nette ajaxu až po jquery?

steelbull
Člen | 241
+
0
-

Ja mám ten istý problém:
Nette 2.2.3
jQuery 1.11.1
nette.ajax.js 1.2.2

Vsetko volam spravne, v spravnom poradi, ale ked chcem ajax inicializovat:

<script>
$(function () {
    $.nette.init();
});
</script>

v konzole vypise chybu:
TypeError: $.nette is undefined

Mysteria
Člen | 797
+
0
-

Ukaž jak přesně linkuješ JS do stránky.

steelbull
Člen | 241
+
0
-

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

Mysteria napsal(a):

Ukaž jak přesně linkuješ JS do stránky.

P.S. povypinal som vsetky ostatne JS, ci sa to s niecom nebije, ale taktiez nepomohlo.

Mysteria
Člen | 797
+
0
-

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.

steelbull
Člen | 241
+
0
-

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.

steelbull
Člen | 241
+
0
-

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.

takto prkotina ale som uz fakt bezradny.

P.S. robim to aspon spravne?