@Vasya-prijevalskij

Почему в данном случае не работает Ajax запрос (October Cms)?

Всем привет.
Пытаюсь создать плагин обратной связи и столкнулся вот с такой проблемой: "AJAX handler 'onFeedback' was not found."
Код самой формы:
<form class="contacts__form" method="POST" data-request="onFeedback" name="form">
        <input class="contacts__form-input" type="text" name="name" placeholder="Имя*" required>
        <input class="contacts__form-input" type="tel" name="tel" placeholder="Телефон*" required>
        <input class="contacts__form-input" type="text" name="company" placeholder="Компания">
        <input class="contacts__form-input" type="email" name="email" placeholder="E-mail">
        <div class="contacts__form-footer">
            <input class="contacts__form-checkbox" type="checkbox" id="contactsFormInput" checked>
            <label class="contacts__form-label" for="contactsFormInput">Я согласен на <a href="politics.html">обработку персональных данных</a></label>
            <button class="site-btn site-btn--red contacts__form-btn" type="submit">Отправить</button>
        </div>
</form>


Код файла Feedback.php, в котором находится сам обработчик:
<?php namespace Admin\Forms\Components;

use Cms\Classes\ComponentBase;
use Admin\Forms\Models\Feedback as ModelFeedback;
use Input;

class Feedback extends ComponentBase
{
    public function componentDetails()
    {
        return [
            'name' => 'Обратная связь',
            'description' => 'Компонент для формы обратной связи'
        ];
    }

    public function defineProperties()
    {
        return [];
    }
    
    public function onFeedback()
    {
        // Get request data
        $data = \Input::only([
            'name',
            'tel',
            'company',
            'email'
        ]);
 
        // Send email
        $receiver = 'info@mim-studio.ru';
 
        \Mail::send('progmatiq.contact::contact', $data, function ($message) use ($receiver) {
            $message->to($receiver);
        });
    }
}


Может кто знает, почему он не видит мой onFeedback()? Спасибо
  • Вопрос задан
  • 324 просмотра
Пригласить эксперта
Ответы на вопрос 2
Adamos
@Adamos
Октябрь тут вообще ни при чем.
Банальное непонимание Javascript.
Указано название метода, не указан класс.
Скрипт ищет функцию с таким названием - и, естественно, не находит.
Ответ написан
Комментировать
catdesign
@catdesign
Веб-разработчик
Я вам рекомендую никогда не указывать имя обработчика без класса компонента.
Вы можете словить очень много ошибок, которые будет трудно отследить.

Например, если на странице будет несколько компонентов с одинаковым методом. Такое часто встречается в Lovata.Buddies, где есть компоненты Login, Registration и тд. С одним плейсхолдер методом onAjax.

Когда вы указываете в data-request="onAjax" или любой другой метод в случае дубликата оного работать это будет некорректно.

Поэтому хорошая практика делать так: data-request="ComponentName::methodName".

Что касаемо вашего вопроса проверьте наличие компонента на странице.
[Feedback]

Измените вызов на data-request="Feedback::onFeedback"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы