Вызов Ajax не работает
Я пытаюсь вызвать .phtml с помощью вызова ajax, и я последовал этому примеру в stackoverflow, но я либо упускаю какой-то аспект, либо просто делаю это неправильно. Когда запускается ajax, он получает 404, и я попытался просмотреть его непосредственно через браузер, но он не смог его найти. Исходя из этого, я предполагаю, что какой-то аспект файловой структуры, которую я настроил, неверен, но я не могу понять, что именно.
У меня есть контроллер, расположенный по адресу local/CheckoutAjax/controllers/AjaxController.php
<?php
class Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$this->loadLayout();
$this->renderLayout();
}
}
В local/CheckoutAjax/etc/config.xml У меня есть следующее
<?xml version="1.0"?>
<config>
<modules>
<Checkoutajax>
<version>0.1.0</version>
</Checkoutajax>
</modules>
<frontend>
<routers>
<Checkoutajax>
<use>standard</use>
<args>
<module>Checkoutajax</module>
<frontName>Checkoutajax</frontName>
</args>
</Checkoutajax>
</routers>
<layout>
<updates>
<checkoutajax>
<file>checkoutajax.xml</file>
</checkoutajax>
</updates>
</layout>
</frontend>
</config>
У меня есть это в mytemplate/default/layout/checkoutajax.xml
<?xml version="1.0"?>
<layout>
<checkoutajax_ajax_index>
<block type="checkout/checkoutajax" name="root" output="toHtml" template="checkoutajax/index.phtml" />
</checkoutajax_ajax_index>
</layout>
И, наконец, у меня есть в mytemplate/по умолчанию/шаблон/checkoutajax/index.phtml
<?php
echo 'this is a test'
Наконец, это вызов ajax
JQuery.ajax({
url: "/checkoutajax/ajax/index",
type: "POST",
data: data,
success: function(data) {
$j('#results').html(data);
document.getElementsByClassName('minicart-content')[0].style.display = 'block';
}
});
Мы очень признательны за любую помощь.
2 answers
Некоторые советы по устранению неполадок:
У вас есть модуль, зарегистрированный в приложении/etc/modules?
Если нет, то это должно быть так:
<?xml version="1.0"?>
<config>
<modules>
<ThomasRyan_Checkoutajax>
<active>true</active>
<codePool>local</codePool>
</ThomasRyan_Checkoutajax>
</modules>
</config>
Это название модуля выглядит неправильным - ожидается, что оно будет разделено подчеркиванием, указывающим на пространство имен - так что не это:
<module>Checkoutajax</module>
Все модули называются Company_Module
и т.д. В этом случае Checkoutajax_AjaxController не является допустимым именем класса. Проверьте свой общий журнал ошибок PHP (или журналы Apache), и вы увидите что-то в духе class not exists
.
Измените/обновите это на ThomasRyan_Checkoutajax
или аналогичное. Все экземпляры Checkoutajax необходимо будет обновить в определении xml модуля.
У имени пользователя также есть проблемы, а именно, оно должно быть в нижнем регистре:
<frontName>Checkoutajax</frontName>
Я не уверен, что Magento использует нижний регистр в имени маршрута.
Обновленный код, затем:
<?xml version="1.0"?>
<config>
<modules>
<ThomasRyan_Checkoutajax>
<version>0.1.0</version>
</ThomasRyan_Checkoutajax>
</modules>
<frontend>
<routers>
<Checkoutajax>
<use>standard</use>
<args>
<module>ThomasRyan_Checkoutajax</module>
<frontName>checkoutajax</frontName>
</args>
</Checkoutajax>
</routers>
<layout>
<updates>
<checkoutajax>
<file>checkoutajax.xml</file>
</checkoutajax>
</updates>
</layout>
</frontend>
</config>
И контроллер:
<?php
class ThomasRyan_Checkoutajax_AjaxController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$this->loadLayout();
$this->renderLayout();
}
}
Редактировать:
Это всего лишь краткое обновление чтобы объяснить, как маршруты/контроллеры/действия работают в Magento. Допустим, это ваш URL-адрес:
www.yourstore.com/checkoutajax/ajax/index
Это представляет три разные сущности:
-
checkoutajax
- это имя маршрута, также называемоеfrontName
в XML-определении модуля -
ajax
здесь представляет имя контроллера. Этот файл контроллера должен иметь имя AjaxController.php и находится в каталоге/controllers
вашего модуля. -
index
представляет методindexAction
.
Итак, чтобы визуализируйте:
www.yourstore.com/checkoutajax/ajax/index
---------route--------^
---------controller-------------^
---------action-----------------------^
У вас опечатка в имени файла. Файл контроллера должен иметь имя local/CheckoutAjax/controllers/AjaxController.php (без буквы s)