Autor | Zpráva | ||
---|---|---|---|
lukasMK Profil * |
#1 · Zasláno: 22. 10. 2014, 07:39:45 · Upravil/a: lukasMK
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; }); 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 |
#2 · Zasláno: 22. 10. 2014, 07:48:42
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 * |
#3 · Zasláno: 23. 10. 2014, 10:27:51
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 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 |
#4 · Zasláno: 23. 10. 2014, 10:32:19
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 * |
#5 · Zasláno: 23. 10. 2014, 11:00:34
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 |
#6 · Zasláno: 23. 10. 2014, 11:01:48
lukasMK:
Nezacyklí, ty nebudeš přesměrovávat, ale odešleš AJAXem požadavek jakoby uživatel ten filtr právě nastavil. |
||
lukasMK Profil * |
#7 · Zasláno: 23. 10. 2014, 14:05:30
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 |
#8 · Zasláno: 23. 10. 2014, 14:13:35
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 * |
#9 · Zasláno: 23. 10. 2014, 14:44:22
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 |
#10 · Zasláno: 23. 10. 2014, 14:46:02
lukasMK:
Chceš to spustit jen jednou, v okamžik, kdy se stránka načte. |
||
lukasMK Profil * |
#11 · Zasláno: 23. 10. 2014, 14:51:07
Přesně tak, jelikož se moc nevyznám ani v java scriptu tak jsem window.onload() zazdil.
|
||
Časová prodleva: 10 let
|
0