Октябрьская CMS - отправка формы AJAX от одного компонента к другому

Делаю сайт на октябрьской CMS.

Я создал 1 компонент, скажем, Component_1 и Component_2

Теперь я хочу отправить данные из Component_1 в Component_2 через форму [через APi атрибутов данных AJAX]

Итак, в моем компоненте_1 у меня есть форма:

<form method="POST" data-request="Component_2::onSubmit" data-request-flash>

а в Component_2 у меня есть метод onSubmit () {// Здесь ничего нет}

Когда я отправляю форму, я получаю сообщение об ошибке:

AJAX handler 'Component_2::onSubmit' was not found.

Затем у меня есть такая же функция в Component_1 :: onSubmit, и когда я отправляю эту форму в Component_1 :: onSubmit, я не получаю ошибок.

Итак, не могли бы вы предложить мне способ отправить форму через AJAX от component_1 к component_2

Спасибо


person Bilal Mustafa    schedule 22.01.2018    source источник


Ответы (1)


Хм, это должно сработать, убедитесь, что вы используете component alias имена вместо class name,

просто чтобы сообщить, что мы not passing data from one component to another, это просто обычный ajax request, и мы отправляем данные из browser to component

если я объявлю class class componentOne { ... etc, мы не будем использовать этот.

тогда, когда we include внутри страницы будет alias name, вам нужно будет использовать этот alias name для запроса ajax.

введите здесь описание изображения

Обновление (с использованием обработчика ajax другой страницы)

нам нужно использовать ajax JavaScript API, это даст нам больше гибкости

вы можете использовать этот код

<!-- current page is `test` 
we are requesting ajax request on anohter `testing` page which is having 
compoTwo component and having `onAjaxReq` ajax handler -->
<button onClick="requestAnotherPage(this)" type="button" class="btn btn-danger" >
    My button
</button>

<script>
function requestAnotherPage(th) {
    $(th).request('compoTwo::onAjaxReq', {
        url: "{{ 'testing'|page }}", // <- this option
        // url: "http://timeloger.test/testing", 
        flash: 1,
        data: { id: 2, name: 'hardik'},     
        handleFlashMessage: function(message, type) {
            $.oc.flashMsg({ text: message, class: type })
        },
        success: function(data) { console.log('success'); this.success(data); }
    });
}
</script>

вам нужно позаботиться о URL-адресе другой страницы

{{ 'testing'|page }} сгенерирует URL этой страницы http://timeloger.test/testing вам нужно передать page File Name в качестве параметра там {{ 'page-name'|page }} -> он сгенерирует правильный URL

теперь ajax api может запрашивать у another given page url и fetch data.

person Hardik Satasiya    schedule 22.01.2018
comment
Привет, Хардик, спасибо, что посмотрел, я использую тот же псевдоним, но все еще безуспешно, в моем случае у меня есть компонент 1 на домашней странице и компонент 2 на другой странице ... в основном на домашней странице у меня есть компонент поиска, и я пытаюсь отправлять данные в компонент, определенный на другой странице, так как мне нужны параметры поиска в этом втором компоненте, который определен на другой странице. - person Bilal Mustafa; 22.01.2018
comment
хммм, кажется, ajax-framework использует url: window.location.href,, поэтому он всегда будет пытаться fire ajax по одному и тому же URL-адресу, поэтому он будет pick same page rather then other page, так что, похоже, его not possible to call different page's ajax-hander from current page - все же я попытаюсь найти какой-то обходной путь и опубликовать его - person Hardik Satasiya; 22.01.2018