Nakupny kosik cez ajax neupdatuje obsah pouzitim invalidatecontrol
- MKI-Miro
- Člen | 277
Ahojte
Viete mi prosim poradit co v kode robim zle.
Payload mi vrati len payload.message, pricom v niektorom vlakne som cital zeby to malo vratit obsah celeho noveho snippetu.
public function renderBuy($pizzaid)
{
$pizza = $this->pizzaRepository->findById($pizzaid);
$session = $this->presenter->context->session;
$cartSession = $session->getSection('cart');
$cartItems = $cartSession->cart;
$cart = new Cart();
$cart->name = $pizza->name;
$cart->price = $pizza->price;
$cart->id = $pizza->id;
$cartItems[] = $cart;
$cartSession->cart = $cartItems;
$this->template->cart = $cartItems;
if ($this->isAjax()) {
$this->invalidateControl('cart');
$this->payload->message = $cartItems;
$this->sendPayload();
}
}
$.nette.init();
$('.addtocart-button').click(function () {
$.nette.ajax({
url: '/www/online/buy',
type: 'POST',
data: {
pizzaid: $(this).attr('name')
},
success: function (payload) {
window.console && console.log(payload); //VRATI LEN PAYLOAD.MESSAGE
},
error: function (xhr, ajaxOptions, thrownError) {
window.console && console.log(xhr.responseText);
window.console && console.log(thrownError);
}
});
});
dakujem
- jiri.pudil
- Nette Blogger | 1029
- URL v JavaScriptu bys měl sestavovat přes makro {link}
- AJAX se zpracovává v signálech (handle* metody), viz dokumentace
Editoval jiri.pudil (15. 4. 2013 8:40)
- MKI-Miro
- Člen | 277
sablona layout.latte
{snippet cart}
<table>
{if $cart}
{foreach $cart as $item}
<tr>
<td><a href="#" class="removefromcart-button" name="{$item->id}">x</a></td>
<td>{$item->name}</td>
<td>{$item->price}</td>
</tr>
{/foreach}
{/if}
</table>
{/snippet}
ano ak sa to zacne spravat dobr etak to prehodim do handle
tu je aj link na online verziu http://www.pizza-kosice.sk/www/online/
po kliknuti na pridat do kosika by sa malo na pravej casti prekreslit zoznam pizza
v konzole sa zobrazi len payload.message kde som to teraz prepisal na $this->payload->message = „test“;
Editoval MKI-Miro (15. 4. 2013 9:26)
- newPOPE
- Člen | 648
Strela od clenku :-D
Nebude to nahodou preto, ze volas $this->sendPayload()
,
predpokladam, ze to odpali prame poslanie payloadu a na „detekciu“ (kedze to
je az v sablone ku ktorej sa to vobec nedostane) snippetov sa ti Nette
vykasle…
PS: nevymyslaj tam z custom JS kodom pokial ho nepotrebujes. Include-ni si
nette.ajax.js
. Pridaj class ajax
odkazom ktore
potrebujes. Do sablon pridaj {snippet ...}
kam potrebujes. Do
Presenterov
dopln signaly a ficis ;-).
Editoval newPOPE (15. 4. 2013 10:08)
- MKI-Miro
- Člen | 277
newPOPE napsal(a):
Strela od clenku :-D
Nebude to nahodou preto, ze volas
$this->sendPayload()
, predpokladam, ze to odpali prame poslanie payloadu a na „detekciu“ (kedze to je az v sablone ku ktorej sa to vobec nedostane) snippetov sa ti Nette vykasle…PS: nevymyslaj tam z custom JS kodom pokial ho nepotrebujes. Include-ni si
nette.ajax.js
. Pridaj classajax
odkazom ktore potrebujes. Do sablon pridaj{snippet ...}
kam potrebujes. DoPresenterov
dopln signaly a ficis ;-).
skusil som dat prec $this->sendPayload() a vylsedok stale rovnaky
tomu druhemu odstavcu som velmi nepochopil co nim myslis.
- MKI-Miro
- Člen | 277
Schmutzka napsal(a):
Zkus také kouknout na nejjednodušší AJAX příklad
skusil som si to a funguje, tak idem postupne tam pridavat veci a zistit v ktorom kroku to spadne, dam potom vediet
- MKI-Miro
- Člen | 277
takze uz som asi aj nasiel chybu
je potrebné posielať v data paramter do: „AddToCart“
a nie je potrebné dávať do url view ale postačuje presenter
$('.addtocart-button').click(function () {
$.nette.ajax({
url: '/www/online3/',
type: 'POST',
data: {
pizzaid: $(this).attr('name'),
do: "AddToCart"
},
success: function (payload) {
window.console && console.log(payload);
},
error: function (xhr, ajaxOptions, thrownError) {
window.console && console.log(xhr.responseText);
window.console && console.log(thrownError);
}
});
});
- Vojtěch Dobeš
- Gold Partner | 1316
Jen se zeptám, ten sendPayload()
musel pryč, ne (aby se
odesílaly snippety)?
jiri.pudil napsal: AJAX se zpracovává v signálech (handle* metody), viz dokumentace
V signálech se zpracovávají signály – klidně lze dělat AJAXový
požadavek na obyčejný view třeba pro načtení dalších dat. Proto existuje
metoda $this->isAjax()
, která je dostupná odevšady.