Есть кнопка
<button class="catalog__like btn shadow-none w-auto bg-transparent favorites" role="button" data-item="319"></button>
при нажатии ее оправляем данные data-item обработчику
Array.from(document.getElementsByClassName('catalog__like')).forEach((button) => {
button.addEventListener('click', (e) => {
e.preventDefault();
console.log(e.target.getAttribute('data-item'));
let doAction = 'add';
addFavorite(e.target.getAttribute('data-item'), doAction);
})
});
function addFavorite(id, action) {
BX.ajax({
url: '<?=\CUtil::jsEscape(SITE_TEMPLATE_PATH)?>/ajax/favorities.php',
method: 'POST',
data: {"id": id, "action": action},
dataType: 'json',
async: true,
onsuccess: function (response) {
if (result == 1) {
console.log('ok')
}
if (result == 2) {
console.log('no')
}
},
onfailure: BX.delegate(function (response) {
}, this),
error: function (jqXHR, textStatus, errorThrown) { // Если ошибка, то выкладываем печаль в консоль
console.log('Error: ' + errorThrown);
console.log(this.data)
}
});
}
обработчик
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");
//header('Content-Type: application/json');
$GLOBALS['APPLICATION']->RestartBuffer();
use Bitrix\Main\Application;
use Bitrix\Main\Web\Cookie;
$application = Application::getInstance();
$context = $application->getContext();
global $APPLICATION;
$request = \Bitrix\Main\HttpApplication::getInstance()->getContext()->getRequest();
if ($request->isPost() && isset($request['id']) && isset($request['action'])) {
$idUser = $USER->GetID();
$rsUser = CUser::GetByID($idUser);
$arUser = $rsUser->Fetch();
$arElements = $arUser['UF_FAVORITES']; // Достаём избранное пользователя
$arElements[] = $request['id'];
$USER->Update($idUser, array("UF_FAVORITES" => $arElements)); // Добавляем элемент в избранное
$result = 1;
echo json_encode($result);
}
?>
в ответ прилетает что все ок (возвращает 1), но данные не обновляет
в консоли летит
BX.debug:
(3) ['processing', ReferenceError: result is not defined
at Object.onsuccess (https://..............., {…}]
debug.js:41 console.trace
debug @ debug.js:41
emit @ event-emitter.js:537
onCustomEvent @ core-compatibility.js:324
BX.ajax.processRequestData @ core_ajax.js:500
BX.ajax.__run @ core_ajax.js:390
config.xhr.onreadystatechange @ core_ajax.js:228
XMLHttpRequest.send (async)
BX.ajax @ core_ajax.js:261
addFavorite @ ?clear_cache=Y:1825
(anonymous) @ ?clear_cache=Y:1819
что не так? чего ругается?
решение.
поправил ответ, сделал его JSON
ответ
if (!in_array($request['id'], $arElements)) // Если еще нету этой позиции в избранном
{
$arElements[] = $request['id'];
//$result = 1;
$result = array("ID" => $request['id'], "RESULT" => 'ADD' );
} else {
$key = array_search($request['id'], $arElements);
unset($arElements[$key]);
$result = array("ID" => $request['id'], "RESULT" => 'DEL' );
}