<div class="subscribe__form_wrap">
<form action="/ajax/subscribe.php" method="post" aria-label="Контактная форма" class="subscribe__form">
<div class="form-inputs">
<input size="40" class="input" aria-required="true" aria-invalid="false" placeholder="Ваш e-mail" value="" type="email" name="email" required>
<div class="has-loader">
<input class="btn btn-accent" type="submit" value="Подписаться">
</div>
</div>
</form>
<div class="form_error"></div>
</div>JS-скрипт
document.addEventListener('DOMContentLoaded', function() {
'use strict';
function handleFormSubmit(e) {
e.preventDefault();
let form = e.target;
BX.showWait(form);
sendOrder(form);
}
let forms = document.querySelectorAll('.subscribe__form');
[...forms].forEach(form => {
form.addEventListener('submit', handleFormSubmit);
});
async function sendOrder(form) {
let subscribe_wrap = form.parentElement,
form_errorEl = form.parentElement.querySelector('.form_error');
await fetch(form.getAttribute('action'), {
method: 'POST',
body: new FormData(form)
})
.then((result) => result.json())
.then((result) => {
BX.closeWait();
if (result.status == 'success') {
if(subscribe_wrap.classList.contains('subscribe__form_wrap') && result.message) {
subscribe_wrap.classList.add('result');
subscribe_wrap.innerHTML = result.message;
}
} else {
if(form_errorEl && result.message) {
form_errorEl.innerHTML = result.message;
}
return false;
}
})
.catch((error) => {
BX.closeWait();
console.error('Catch error:', error);
});
}
});PHP-файл для обработки запроса
/ajax/subscribe.php<?php
$arResult = array();
if ($_POST['email'] && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
require_once($_SERVER['DOCUMENT_ROOT']."/bitrix/modules/main/include/prolog_before.php");
if(CModule::IncludeModule('subscribe')) {
global $USER;
// формируем массив с полями для создания подписки
$arFields = Array(
"USER_ID" => ($USER->IsAuthorized() ? $USER->GetID() : false),
"FORMAT" => "html",
"EMAIL" => $_POST['email'],
"ACTIVE" => "Y",
"RUB_ID" => array('1'), // массив ID рассылок
"SEND_CONFIRM" => 'Y'
);
$subscr = new CSubscription;
// создаем подписку
$ID = $subscr->Add($arFields);
if ($ID > 0){
$arResult['status'] = 'success';
$arResult['message'] = '<p>Спасибо!<br>Мы отправили письмо на адрес <b>'.$_POST['email'].'</b>. Подтвердите вашу почту, <u>перейдя по ссылке в письме</u>.</p>';
} else {
$arResult['status'] = 'error';
$arResult['message'] = str_replace("<br>","",$subscr->LAST_ERROR);
}
}
} else {
$arResult['status'] = 'error';
$arResult['message'] = 'Неправильный email-адрес';
}
echo json_encode($arResult);
?>