PrestaShop 9 klaidos
Call to undefined method ajaxDie() PrestaShop 9 versijoje
PrestaShop 9 pašalino ajaxDie() iš valdiklių. Modulių AJAX veiksmai, kurie juo atsakydavo, nebeveikia, o mygtukai, filtrai ar formos tyliai nustoja reaguoti.
- Klaida
Call to undefined method MyModuleAjaxModuleFrontController::ajaxDie()- Pašalinta
- PrestaShop 9.0
- Dažniausiai randama
- Modulių valdikliai (parduotuvės ir administravimo)
Kas nutiko
Daug modulių į AJAX užklausas valdiklyje atsako $this->ajaxDie($json): išveda atsakymą ir sustoja. PrestaShop 9.0 pašalino ajaxDie() iš bazinės Controller klasės. PrestaShop 8 jis jau buvo tik apvalkalas, kuris iškvietė ajaxRender() ir tada exit.
Klaidoje nurodoma jūsų valdiklio klasė, pavyzdžiui, MyModuleAjaxModuleFrontController::ajaxDie() ar AdminMyModuleController::ajaxDie(), nes PHP parodo klasę, kurioje kvietimas atliktas.
Ekrane tai retai atrodo kaip klaida. AJAX užklausa fone grąžina klaidą 500, o lankytojas mato tik tai, kad „į norų sąrašą“, filtras, paieška ar išsaugojimo mygtukas nieko nedaro. Nesėkmingą užklausą matysite naršyklės kūrėjo įrankiuose, skiltyje Network.
Sprendimas
ajaxRender() PrestaShop 9 tebėra ir išveda atsakymą. Jis nesustabdo skripto, todėl exit pridėkite patys:
// Buvo
$this->ajaxDie(json_encode($result));
// Dabar (veikia 1.7, 8 ir 9)
$this->ajaxRender(json_encode($result));
exit;
Hook'as actionAjaxDie<Controller><Method>Before vis dar vykdomas ajaxRender() viduje, todėl jo klausantys moduliai veikia toliau.
Kur dar slepiasi
Peržiūrėkite visus modulio valdiklius: controllers/front/, controllers/admin/ ir kiekvieną klasę, kuri paveldi PrestaShop valdiklį.
grep -rn "ajaxDie" modules/ override/
Modulis, naudojęs ajaxDie(), dažnai turi ir savo ajax.php failą modulio aplanke. PrestaShop 9 blokuoja ir jį: žr. 403 Forbidden modulio ajax.php faile.