AJAX в 1С-Битрикс - запросы к своему коду и к компонентам
AJAX - подтема на 8 вопросов из собранных. Почти все они об одном: запрос уходит, а в ответ приходит не то, что ожидалось.
Что общего у этих задач
Запрос всегда идёт в какой-то файл сайта. Это либо контроллер модуля, либо свой файл с подключённым ядром, либо страница с компонентом в режиме обмена. Выбор точки входа определяет всё остальное: права, ответ и цену запроса.
Ядро подключается отдельно и осознанно. Файл без подключения ядра ничего не знает ни о пользователе, ни о базе, а полное подключение стоит почти столько же, сколько обычная страница. Отсюда правило: лёгким запросам - лёгкое подключение.
Ответ должен быть чистым. Любой лишний вывод до ответа - предупреждение PHP, пробел в файле, отладочная печать - ломает разбор ответа на стороне браузера, и выглядит это как «запрос не работает».
Права и проверки никуда не исчезают. Отдельная точка входа проверяет ключ сеанса и доступ так же строго, как обычная страница, иначе её начинают дёргать посторонние.
Ответ разбирает браузер, а не человек. Понятный формат ошибки с кодом и текстом экономит часы разбора и позволяет показать посетителю причину, а не общее «что-то пошло не так».
Решения подтемы
- AJAX-запрос: контроллер, свой файл и ответ в JSON - куда отправлять, как подключать ядро, как вернуть чистый ответ.
- Отправка формы через AJAX: проверка полей, защита, ответ с ошибками - идентификатор сеанса, проверка на сервере, ответ по полям.
- Не работает AJAX-запрос: разбор причин - лишний вывод, ненайденное действие, подпись, права, адрес.
- Проверка входных данных атрибутами: правила, результат, контроллер - атрибуты-правила, сервис проверки, инварианты, подстановка.
- Загрузка файла с формы: приём, проверки, прогресс, хранение - отправка с прогрессом, проверки на сервере, сохранение, чистка.
- Подгрузка списка порциями: кнопка и прокрутка - штатные параметры, своя порция, адреса, кэш, дубли.
- Контроллер изнутри: маршрут, действие, фильтры, ответ - адрес и маршрут, действия, фильтры до и после, формат ответа.
Частые вопросы
Чем контроллер лучше своего файла?
Он сам разбирает параметры, проверяет права и отдаёт ответ в едином формате. Свой файл даёт полную свободу и требует всё это писать руками.
Почему в ответ приходит вся страница?
Запрос ушёл на обычную страницу сайта, а не в точку обмена. Компонент в режиме обмена и контроллер отдают только свою часть.
Нужно ли подключать ядро в файле-обработчике?
Да, иначе API платформы недоступно. Для лёгких ответов подключают ядро в облегчённом режиме, без пролога публичной части.
Почему ответ не разбирается на стороне браузера?
В него попал посторонний вывод: предупреждение PHP, пробел перед открывающим тегом или отладочная печать. Ответ должен содержать только данные.
Связанные темы
- JS-ядро и интерфейсы - что доступно на стороне браузера
- Компоненты 2.0 - режим обмена у компонента
- Ядро D7 - основы - контроллеры и подключение ядра
- Раздел Фронтенд и интерфейсы