Компонент в режиме AJAX_MODE внутри шаблона другого компонента
Добрый день. Есть очень непонятная проблема.
По порядку:
1. Есть структура шаблона для примера:
2. Есть страница со стандартным комплексным компонентом bitrix:catalog
В шаблоне элемента компонента bitrix:catalog.element (template.php) вставлен код компонента добавления результата веб формы bitrix:form.result.new .
Форма отлично работает.
Теперь проблема:
При переключении компонента bitrix:form.result.new в режим AJAX. (параметр AJAX_MODE=’Y’) едет верстка!
Должно быть так:
Т.е. весь основной контент сайта попадает в header. А теги в которых должен быть контент вставляются куда-нибудь между кодом компонента работающего в режиме AJAX.
Кто встречался с таким? Очень прошу помощи.
Пробовал такие варианты:
1. В основном файле шаблона (template.php) компонента bitrix:catalog.element убирал весь код который есть, оставлял только код компонента bitrix:form.result.new. — ПРОБЛЕМА СОХРАНЯЕТСЯ.
2. Вставлял код bitrix:form.result.new в файл element.php комплексного компонента catalog вместо всего что там есть (вместо вызова шаблона элемента) — ПРОБЛЕМА ИСЧЕЗАЕТ.
3. Просто ставил вызов компонента bitrix:form.result.new на чистую страницу с хедером и футтером. — ПРОБЛЕМЫ НЕТ
Т.е. проблема именно при размещении AJAX компонента в шаблоне другого компонента.
Нашел похожую тему, там был совет что подобный косяк с версткой может быть если где то в шаблонах компонентов используются отложенные функции. Но в данном случае ничего не нашел.
Источник
Ajax режим в bitrix:iblock.element.add.form
Доброго времени суток. В публичной части сайта размещен компонент bitrix:iblock.element.add.form, шаблон пока что не модифицирован. В вызов компонента для работы в ajax-режиме (форма должна открываться в попапе) добавлено следующее:
Ajax-режим срабатывает нормально 1 раз, если я нажимаю submit второй раз — остается вместо страницы только сама форма, ломается обработчик судя по всему. При этом, если я залогиненым смотрю страницу, сверху есть панель администратора, все работает нормально, сколько бы раз я ни нажимал на сабмит. Какого-то скрипта не хватает, почему так? Шапка сайта такая:
Если кто столкнется — на данный момент лечится отключением оптимизации js в настройках главного модуля.
Если подробнее, то на ответе от компонента биндятся на битрикс-событие onAjaxSuccess некие действия, в частности по перебинду сабмита формы. Это событие не срабатывает, потому что в ответе в некоем массиве arAjaxPageData приходит пустой ключ SCRIPTS. PHP туда пишет все скрипты, если ajax запрос ($this->bInAjax, может это значит что-то другое) или если сайт «не js оптимизирован». $this->bInAjax в труе ставит функция ShowAjaxHead, которая вроде бы не вызывается при работе компонента в ajax-режиме, поэтому пришлось отключить «оптимизацию js», чтобы злополучный ключ SCRITPS был не пустой. Как-то так.
А у меня в режиме AJAX на мобильных устройствах. компонент bitrix:iblock.element.add.form работал не правильно, при успешном заполнении или при ошибке (не заполнено то то ) вместо подгрузки текста ошибки-сообщения, на странице оставалось только окно модуля.
Вылечил добавлением в настройки компонента
«AJAX_MODE» => «Y»,
«AJAX_OPTION_SHADOW» => «Y»,
(у меня на странице было два одинаковых компонента, добавлять строку «AJAX_OPTION_SHADOW» => «Y» пришлось в оба )
На пк без «AJAX_OPTION_SHADOW» => «Y» работало/ет без глюков
Источник
Проблемы с Ajax + не могу авторизоваться
Как-то не заладилось с утра:
1) Содержимое включаемой области:
нужно, чтоб по выбору значения в первом селекте, подгружались варианты во второй (двольно стандартная задача)
вот собственно вызываемый скрипт
в соответствии с рекомендацией: http://dev.1c-bitrix.ru/community/blogs/cookbook/197.php вызывается $APPLICATION->RestartBuffer(); , но скрипт в БУСе ведет себя все равно, как хочет
Т.е. если в мозилле обратиться, как http://localhost:6448/ajax.php?SECTION_ID=14 , он выводит какие-то . — откуда? О_о, причем собственно option-ы не выводятся!
Дальше — больше, если в функции updateservices() делать alert(xmlHttp.responseText) — в мозилле ничего не алертуется, а в опере все равно выводится HTML с доктайпом, хэдером, etc. — откуда? я же вызвал $APPLICATION->RestartBuffer()?
2) Начал грешить на лису и решил попробовать в Опере — напрямую к http://localhost:6448/ajax.php?SECTION_ID=14 БУС не пустил (хотя и стоял доступ «чтение» для всех), решил авторизоваться — ПАРОЛЬ НЕПРАВИЛЬНЫЙ. В состоянии легкого шока решил перепроверить в фоксе: вышел, попробовал зайти и сохраненный до этого пароль оказался неправильным! теперь я вообще в админку не могу зайти, т.к. не знаю, какой ему пароль нужен (неделю работал, нормально все было). Сайт на локалхосте, поэтому ни о тех. поддержке, ни о сбросе пароля по e-mail речи не идет, что делать-то.
ЗЫ: хотел смайлик и оформление кода вставить в это сообщение — дак и то не работает. *dash*
Источник