Ajax požadavek z jednoho presenteru funguje, z druhého ne

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

Čau, už se s tim peru celej den. Mám 2 presentery HomepagePresenter a ProductPresenter.

V HomepagePresenter mám handle :

public function handleRemoveFromCart($cartpid)
{
     $_sblock = $this->getSession('cart');
     $_sblock->cart->remove($cartpid);

     if($this->isAjax()){
        $this->redrawControl('cart');
        $this->redrawControl('delivery');
     }
}

funguje uplne v pohodě (v sessionu je objekt, který slouží jako košík) v ProductPresenteru mám uplně stejnou metodu. Ovšem pokud jí zavolám, tak mi tato část vrací internal error

// tohle... ne muj košík (pokud tam tyhle
// 3 řádky nedám a hodím tam nějakej redirect
// tak to v pohodě funguje...)
if($this->isAjax()){
   $this->redrawControl('cart');
   $this->redrawControl('delivery');
}

Samozřejmě dědím nějakej BasePresenter, jako první jsem samozřejmě dělat jen 1 metodu pro oba presentery, ale fungovalo to stejně, tak jsem to právě zkusil rozdělit abych věděl, kde je problém.

v @layout.latte ve frontendu mám košík zhruba takto:

{snippet cart}
   <div id="cart">
      {foreach $cart->getProducts() as $pid => $product}
         <span class="cart_p">{$product->name} | {$product->getCtgObject()->name} | {$pid}</span>
         <a n:href="removeFromCart! $key" class="ajax"><img src="{$basePath}/images/del.png"></a>
      {/foreach}
   </div>
{/snippet}

Absolutně mě zaráží proč to z product presenteru nejde a z homepage ano? Ajax URL jsou následující:

"/produkt/antilaser-priority?cartpid=single-antilaser-priority&do=removefromcart" <- nefunguje
"/?cartpid=antilaser-priority&do=removefromcart" <- funguje

Uvítal bych nějaké nápady… potřebuju to mít co nejrychleji hotové. Normální redirect je nežádoucí… musí to být ajax. Jiný javascriptový soubor tomu nevadí (zkoušel jsem smazat všechen javascript mimo ajax.nette a jquery)

Jo, ještě co mi hází konzole (pokud to pomůže) :

" 500 (Internal Server Error) jquery.js:6send jquery.js:6×.extend.ajax jquery.js:6ajax ajax.js:205inner.requestHandler ajax.js:48×.event.dispatch jquery.js:5v.handle"

Předem dík, Tomáš.

Editoval Томас (18. 9. 2014 2:39)

Томас
Člen | 85
+
0
-

Ještě jsem zapoměl dodat, jednou to funguje.. jendou ne (občas se mi záhadně povede smazat 1 produkt z košíku, potom se to redrawne a pak už to zas nefunguje)

nebo 10× to nefunguje a pak se mi zádně nějakej produkt smaže

Majkl578
Moderator | 1364
+
0
-

Ovšem pokud jí zavolám, tak mi tato část vrací internal error

Tím bych asi začal, zjisti, co to způsobuje. Koukni do logů a/nebo si zapni Tracy + Firelogger.

Druhá věc, invaliduješ snippet delivery, ale v layoutu jej nemáš, určitě všude existuje? (Nejsem si teď jistý, jestli by to házelo výjimku ne, možná ne.)

Edit:

V HomepagePresenter mám handle

A chceš ten handle volat i z product presenteru? Tak to budeš muset dát taky do společného předka.
(Přesně na tohle slouží komponenty, zneužívání dědičnosti na tyhle věci je špatná cesta.)

David Kudera
Člen | 455
+
0
-

ahoj, nevím, jestli je to to stejný problém, ale tady se řešilo taky něco takovýho. Bylo to v nějaké 2.2 verzi a taky z jednoho presenteru mi všechno šlo, z jinýho už ale ne

Editoval David Kudera (18. 9. 2014 8:27)

Томас
Člen | 85
+
0
-

Ahoj, no tracy mi absolutně vůbec nic nevyhodí a v logu nic není. Firelogger mi toho taky moc neřekl.

Snippet delivery opravdu existuje.Handle volám i z product presenteru ale v product presenteru je uplně stejná metoda jako v homepage presenteru (úplný duplikát).

Takže tady to moc růžově nevidím.

David Kudera:
Nene, o tuto chybu se nejedná.

Mám takový pocit, že mám spíše problém se sessionama… teď už jdu spát ale zítra se na to vrhnu hned ráno, měl jsem toho dneska hodně. Jsem si jist, že bude problém někde na hostingu → na localhostu to samozřejmě funguje.. jak jinak.