Отправка веб-формы через ajax с отключением редиректа на Bitrix

Главная » Блог программиста » Bitrix: Отправка веб-формы через ajax с отключением редиректа

Просмотров: 1833

Bitrix: Отправка веб-формы через ajax с отключением редиректа

При интеграции веб-формы иногда требуется реализовать отправку средставами ajax. Если при этом не должен использоваться стандартный функционал отправки веб-форм средствами ajax - можно реализовать это "вручную".
В файле /ajax/callback.php:

require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'main',
'OnBeforeLocalRedirect',
'formBeforeRedirect'
);

function formBeforeRedirect($redirectUrl) {
parse_str(parse_url($redirectUrl, PHP_URL_QUERY), $query);
if (!empty($query['WEB_FORM_ID']) && !empty($query['formresult'])) {
if($query['WEB_FORM_ID']==WEB_FORM_CALLBACK)
die();
}
}
$APPLICATION->IncludeComponent("bitrix:form.result.new", "spin_request_call" ...

В шаблоне веб-формы:
if ($arResult["FORM_ERRORS_TEXT"] && $arResult["WEB_FORM_ID"] == intval($_REQUEST["WEB_FORM_ID"])) {
$APPLICATION->RestartBuffer();
header('Content-Type: application/json; charset=' . LANG_CHARSET);
die(json_encode(Array(
'status' => true,
'title' => 'Произошла ошибка',
'msg' => $arResult["FORM_ERRORS"],
)));
}elseif ($_REQUEST['formresult'] && $arResult["FORM_ERRORS_TEXT"] == "" && $arResult["WEB_FORM_ID"] == intval($_REQUEST["WEB_FORM_ID"])){
$APPLICATION->RestartBuffer();
header('Content-Type: application/json; charset=' . LANG_CHARSET);
die(json_encode(Array(
'status' => true,
'title' => 'Спасибо!',
'msg' => 'Наши менеджеры скоро с Вами свяжутся!',
)));
}


Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.