it-blog.club
Битрикс пустой post на детальной странице

Битрикс пустой post на детальной странице

Думаю много кто сталкивался с проблемой пустого массива $_POST при отправке формы ajax'ом на детальных страницах в Битриксе.

Ну например вы пишите собственные компоненты для работы с обращениями пользователей. При этом используете комплексный news и свой кастомный компонент, который как раз и реализует форму. Допустим форма у нас имеется как на index.php, так и на детальной странице обращения.

Тут может возникнуть ситуация, что форма с index.php будет отрабатывать как надо. При событии submit , собираем форму и отправляем по ajax на урл указанный в action. При этом в action мы можем указать $APPLICATION->GetCurPage() или же просто прописать урл страницы. В любом случае при правильном js форма отправится и данные придут как следует.

НО! Если эту же в точности форму разместить на детальной, то форма будет отправлена, ошибок в консоли не будет и там же будет видно, что данные действительно ушли. Вот только если попробовать вывести дамп $_POST , то мы увидим пустой массив.

Кстати, разумеется, чтобы увидеть что данные обновились, то надо заменять необходимые блоки на странице, после выполнения ajax:

$('.js-block-1').html($('.js-block-2',data));

Тут может быть несколько проблем:

1) Ваш кастомный компонент с формой размещён в шаблоне комплексного компонента news, ну просто он закешировался, в случае включённого кеша.

В таком случае необходимо вытащить форму из template.php в detail.php . Вот статья по поводу того, почему нельзя размещать компоненты и писать логику в шаблонах: ТЫК

2) Не правильно задан action . Я не удивлюсь если узнаю, что вы используете ЧПУ. Так что action типа: $APPLICATION->GetCurPage(), прописанный адрес или построенный вами (/messages/<?=$arResult['ID']?>/) просто напросто не будут работать.

По факту страницы с ЧПУ не существует, а её адрес строится по определённым правилам. В таком случае ссылка типа /messages/123321/ работать не будет.

В таком случае в action формы необходимо прописывать специальную константу: POST_FORM_ACTION_URI . Собственно об этом и говорит официальная документация, в которой это правило запрятано неизвестно где.

Данная константа имеет адрес urlrewrite с get параметрами необходимыми для направления запроса далее куда необходимо. Так что ваш action должен выглядеть следующим образом: action='<?=POST_FORM_ACTION_URI?>'

Собственно на этом всё!


it-blog.club 860
Автор: Ярослав Хмель


Если Вам понравилась статья, то можете поддержать блог переведя N сумму на кофе авторам или оплату хостинга!
В любом случае спасибо! А так же не забывайте про группу в ВК
ПОИСК ПО САЙТУ
Поддержать