приложение сайт доступно по домен.su/site/
в /wa-apps/site/plugins/ajax/lib/actions
файл siteAjaxPluginFrontendMail.action.php
<?php
class siteAjaxPluginFrontendMailAction extends waViewAction
{
public function execute()
{
return "test";
}
}в /wa-apps/site/plugins/ajax/lib/config
файл plugin.php
<?php
return array(
// обязательные параметры
'name' => 'Ajax',
'description' => 'ajax',
'version' => '1.0',
);Что я упустил?
http://домен.su/site/?plugin=ajax&action=mail
получаю
Empty module and/or action after parsing the URL "/?module=site&plugin=ajax&action=mail" (frontend/mail).
Not found classes: shopFrontendMailController, shopFrontendMailAction, shopFrontendActions
Error with code 404 in '/home/billyboy/domains/billy-boy.su/public_html/wa-system/controller/waFrontController.class.php' around line 189:
184 if ($action && $default) {
185 return $this->execute($plugin, $module);
186 }
187
188 // Too bad. 404.
>>189 throw new waException(sprintf('Empty module and/or action after parsing the URL "%s" (%s/%s).<br />Not found classes: %s', $this->system->getConfig()->getCurrentUrl(), $module, $action,implode(', ',$class_names)), 404);
190 }
191 }
192
193 // EOF
1. Не создали файл routing.php чтобы можно было обращаться к нему с витрины?
2. http://домен.su/site/?plugin=ajax&action=mail такое обращение некорректно
3. Если используете waViewAction то должен быть и шаблон с выводом ответа. Поэтому лучше использовать waJsonController раз уж вы по ajax обращаетесь.
переделал. Сделал siteAjaxPluginFrontendMail.controller.php вместо siteAjaxPluginFrontendMail.action.php
<?php class siteAjaxPluginFrontendMailController extends extends waJsonController { public function execute() { $this->response = array( 'hhh' => 'жопа', ); }С routing.php подскажите? Что в нем и где он?
В /wa-config/routing.php добавил:
5 => array ( 'url' => 'ajax/*', 'app' => 'site', 'plugin' => 'ajax', ),обращаюсь к домен.su/ajax теперь другая ошибка:
Empty module and/or action after parsing the URL "/ajax/" (frontend/). Not found classes: siteAjaxPluginFrontendController, siteAjaxPluginFrontendAction, siteAjaxPluginFrontendActions Error with code 404 in '/home/billyboy/domains/billy-boy.su/public_html/wa-system/controller/waFrontController.class.php' around line 189: 184 if ($action && $default) { 185 return $this->execute($plugin, $module); 186 } 187 188 // Too bad. 404. >>189 throw new waException(sprintf('Empty module and/or action after parsing the URL "%s" (%s/%s).<br />Not found classes: %s', $this->system->getConfig()->getCurrentUrl(), $module, $action,implode(', ',$class_names)), 404); 190 } 191 } 192 193 // EOF1. Поселить "Сайт" в корень сайта: domain/*
2. В routing.php плагина добавить:
return array( 'ajax/' => 'frontend/mail', );3. В плагине создать файл lib/actions/frontend/siteAjaxPluginFrontendMail.controller.php с классом siteAjaxPluginFrontendMailController.
4. Очистить кеш в Инсталлере (если не включен, а должен быть — на время разработки — режим отладки).
5. Отправлять AJAX-запрос по адресу domain.ru/ajax/.
А если нет возможности поселить "Сайт" в корень сайта: domain/* - будет работать по domain/site/ajax ? И надо ли при этом править routing.php
Где должен находится routing.php плагина?
Работать будет. Править routing.php не нужно, потому что в нём указываются URL плагина относительно URL поселения приложения. Главное в JavaScript-коде плагина учитывайте, что приложение может быть поселено не в корне, а в "подпапке", как в вашем последнем примере.
А где должен быть routing.php для плагина?
lib/config/ в папке плагина.
получаю
<h2 id="Title" style="font-family: 'Times New Roman'; line-height: normal;">Empty module and/or action after parsing the URL "/?plugin=ajax&action=mail" (frontend/mail).Not found classes: shopFrontendMailController, shopFrontendMailAction, shopFrontendActions</h2>
причем
<h2 style="font-family: 'Times New Roman'; line-height: normal;">Call stack</h2>#0 /home/billyboy/domains/billy-boy.su/public_html/wa-system/controller/waFrontController.class.php(58): waFrontController->execute('', 'frontend', 'mail') #1 /home/billyboy/domains/billy-boy.su/public_html/wa-system/waSystem.class.php(586): waFrontController->dispatch() #2 /home/billyboy/domains/billy-boy.su/public_html/index.php(7): waSystem->dispatch()почему-то waFrontController->execute('', 'frontend', 'mail') - не правильно подключен plugin? Почему он передает пустые кавычки?
7 кругов ада, что бы получить "hello world" по ajax
А почему
?
URL во фронтенде должен быть такой: domain.ru/ajax/
А ваш пример URL сработает только в бекенде, и файл routing.php в бекенде не нужен.
domain.ru/ajax/ дает 404
domain.ru/site/ajax/ тоже 404
В конфиге плагина plugin.php есть строка
?
<?php return array( // обязательные параметры 'name' => 'ajax', 'description' => 'ajax', 'version' => '1.0', 'frontend' => true, );/wa-apps/site/plugins/ajax/lib/config/routing.php
return array( 'ajax/' => 'frontend/mail', );/wa-apps/site/plugins/ajax/lib/siteAjax.plugin.php
<?php class siteAjaxPlugin extends sitePlugin { public function method1($params) { } }/wa-apps/site/plugins/ajax/lib/actions/siteAjaxPluginFrontendMail.controller.php
<?php class siteAjaxPluginFrontendMailController extends extends waJsonController { public function execute() { $this->response = array( 'hhh' => 'жопа', ); } }
Кеш очищен?
И лишнее "extends" в последнем файле.
extends -дубль убрал
кеш вычищен, debug mode включен
Все равно 404
Проверяю так (в шапке сайта)
$(function() { $.getJSON('/site/ajax/', function (json) { alert(json); }); $.getJSON('/ajax/', function (json) { alert(json); }); });может тут ошибка, но в консоле вижу что запрос идет и получает 404
Либо вы с вами пропустили какую-то очевидную мелочь, либо это мистика... У меня нормально выплывает alert с [object Object].
Попробуйте создать всё заново, что ли — для чистоты эксперимента.
Залез в routing.php для site
добавил
<?php return array( ............. 'ajax/' => array( 'module' => 'frontend', 'plugin' => 'ajax', 'action' => 'mail', 'secure' => false, ), ...................... );работает
Вот только ответ странный:
return array( 'ajax/' => 'frontend/mail', );{"status":"ok","data":{"hhh":"\u0436\u043e\u043f\u0430"}}Удалил /wa-apps/site/plugins/ajax/lib/config/routing.php
Теперь норм
Спасибо за время
В следующий раз обновите "Сайт", и всё поломается. Лучше так не делать, а разобраться, как сделать правильно.