Autor Zpráva
lukasMK
Profil *
Zdravím, seznamuji se s ajaxem a snažím se si udělat ajaxové přepočítávání košíku.
Všechno funguje, po sisknu na tlačítko se košík updatuje ale po dalším stisknutí se celý košík refreshne:
var AjaxBasket_count = {
    addToBasket_count: function(data, btn){
            if(btn){
            $(btn).attr('disabled', true);
        }

        $.post(_base+'default/ajaxbasket_count', data, function(response){
            if(response){
            if(btn){
            $(btn).removeAttr('disabled');
                $('#main').html(response.products_ajax);    
            }
        }else{
                    window.location = response.page_basket;
                    return;
            }
        }, 'json');
    }
};


  $('button.minus').bind('click', function(){
        var data = {count: parseFloat($('.gty_'+this.value).val())-1, value : this.value};
        AjaxBasket_count.addToBasket_count(data, this);
        return false;
    });
    
Načítám znovu celý obsah košíku (tedy všechny produkty vč. tlačítek) . Přijde mi toto snažší, protože jen posílám nové data na šablonu košíku.
Otázka zdali není právě v tomto problém, že načítám znovu i všechny buttony, na které když pak po ajaxu kliknu tak se to refreshne.


Tak už jsem an to došel, script jsem vložil do šablony košíku a funguje.
juriad
Profil
Ano, pokud tlačítko smažeš a vytvoříš nové, tak původní posluchač události k němu není navázaný.
Můžeš buď tlačítko znovu inicializovat nebo událost navázat na něco, co nebudeš měnit - například celý kontejner košíku a pomocí jQuery metody on vyfiltruješ jen události na jakémholi tlačítku 'button.minus'.
lukasMK
Profil *
Ještě jsem narazil na jeden problém, tak zkusím sem.
Použil jsem ajaxu ještě jinde a to pomocí metody get. Podařilo se mi i dobře zprovoznit zapisování parametrů do URL. Taková adresa pak může vypadat takto:
http://adresa/test.php#filter=1&search=0
Ovšem nenapadá mě řešení když někdo ručně zadaná do adresního řádku právě tuto adresu.
V tom případě to nic neudělá, protože kvůli křížku toto PHP nebere jako GET parametry. Jak se to v tomto případě řeší?
juriad
Profil
lukasMK:
Na stránce budeš mít skipt, který vezme location.hash a spustí celou tu mašinérii.
Ano, toto je nevýhoda AJAXu, stránka se načte vlastně dvakrát - poprvé klasicky bez filtru, a pak AJAXem znovu už zafiltrovaná.
lukasMK
Profil *
Jasné, ale jak mám postavit podmínku? Pokud udělám něco jako if (location.hash){....} tak se to zacyklí...
Jinak díky moc za pomoc.
juriad
Profil
lukasMK:
Nezacyklí, ty nebudeš přesměrovávat, ale odešleš AJAXem požadavek jakoby uživatel ten filtr právě nastavil.
lukasMK
Profil *
Díky za odpověď, ale na to už jsem krátkej. Není mi totiž vůbec jasné jak to udělám, jakou událostí?
juriad
Profil
Prostě do $(document).ready {} nebo window.onload = function() {}, nebo co používáš dáš na konec:
if (location.hash) {...}

Máš předpokládám na stránce htromadu tlačítek, na které máš navěšené posluchače, kteří upraví location.hash a odešlou na server AJAXový požadavek.
Tak teď to uděláš opačně - vezmeš location.hash a rozebereš ho a sestavíš z něj dotaz, který odešleš na server a výsledek zpracuješ stejně, jako by byl reakcí na kliknutí na nějaké tlačítko.

Pokud to máš dobře navržené, je to práce na pár minut; pokud je to zbastlené, tak možná budeš muset napsat větší část znovu.
lukasMK
Profil *
Díky, bylo mi jasné, že to musím udělat naopak, rozebrat hash a poslat na ajax. Jen jsem nevěděl, že musím použít window.onload().
Pak se mě to načítalo pořád dokola a cyklilo. Díky moc za pomoc.
juriad
Profil
lukasMK:
Chceš to spustit jen jednou, v okamžik, kdy se stránka načte.
lukasMK
Profil *
Přesně tak, jelikož se moc nevyznám ani v java scriptu tak jsem window.onload() zazdil.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: