Не могу записать в куки данные. Битркс
Есть скрип, добавляющий в избранное товары. Работает если юзер авторизован, то пишем ему в БД, если нет, не авторизован, то пишем в куки.
Отправляю данные в обработчик:
<script>
$(document).ready(function () {
/* Favorites */
$('.favorites').on('click', function (e) {
var favorID = $(this).attr('data-item');
if ($(this).hasClass('active'))
var doAction = 'delete';
else
var doAction = 'add';
addFavorite(favorID, doAction);
});
/* Favorites */
});
/* Избранное */
function addFavorite(id, action) {
var param = 'id=' + id + "&action=" + action;
$.ajax({
url: '/local/ajax/favorites.php', // URL отправки запроса
type: "GET",
dataType: "json",
data: param,
success: function (response) { // Если Данные отправлены успешно
console.log("responsee");
console.log(response);
var result = $.parseJSON(response);
if (result === 1) { // Если всё чётко, то выполняем действия, которые показывают, что данные отправлены :)
$('.favorites[data-item="' + id + '"]').addClass('active');
var wishCount = parseInt($('#want .col').html()) + 1;
$('#want .col').html(wishCount); // Визуально меняем количество у иконки
}
if (result === 2) {
$('.favorites[data-item="' + id + '"]').removeClass('active');
var wishCount = parseInt($('#want .col').html()) - 1;
$('#want .col').html(wishCount); // Визуально меняем количество у иконки
}
},
error: function (jqXHR, textStatus, errorThrown) { // Если ошибка, то выкладываем печаль в консоль
console.log('Error: ' + errorThrown);
}
});
}
/* Избранное */
</script>
Потом принимаю отправленное:
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
$GLOBALS['APPLICATION']->RestartBuffer();
use Bitrix\Main\Application;
use Bitrix\Main\Web\Cookie;
$application = Application::getInstance();
$context = $application->getContext();
/* Избранное */
global $APPLICATION;
/* Избранное */
if ($_GET['id']) {
if (!$USER->IsAuthorized()) // Для неавторизованного
{
$arElements = unserialize($APPLICATION->get_cookie('favorites'));
if (!in_array($_GET['id'], $arElements)) {
$arElements[] = $_GET['id'];
$result = 1; // Датчик. Добавляем
} else {
$key = array_search($_GET['id'], $arElements); // Находим элемент, который нужно удалить из избранного
unset($arElements[$key]);
$result = 2; // Датчик. Удаляем
}
$cookie = new Cookie("favorites", serialize($arElements), time() + 60 * 60 * 24 * 60);
$cookie->setDomain($context->getServer()->getHttpHost());
$cookie->setHttpOnly(false);
$context->getResponse()->addCookie($cookie);
$context->getResponse()->flush("");
} else { // Для авторизованного
$idUser = $USER->GetID();
$rsUser = CUser::GetByID($idUser);
$arUser = $rsUser->Fetch();
$arElements = $arUser['UF_FAVORITES']; // Достаём избранное пользователя
if (!in_array($_GET['id'], $arElements)) // Если еще нету этой позиции в избранном
{
$arElements[] = $_GET['id'];
$result = 1;
} else {
$key = array_search($_GET['id'], $arElements); // Находим элемент, который нужно удалить из избранного
unset($arElements[$key]);
$result = 2;
}
$USER->Update($idUser, array("UF_FAVORITES" => $arElements)); // Добавляем элемент в избранное
}
}
/* Избранное */
echo json_encode($result);
die(); ?>
<? require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/footer.php"); ?>
Работает если авторизован, все ок.
Если не авторизован то не пишет. Ковыряюсь и добился того что выводит (index):70 Error: SyntaxError: Unexpected end of JSON input но где что править не пойму
Ответы (1 шт):
Автор решения: Сергей Савченко
→ Ссылка
У вас ajax запрос ожидает json dataType: "json"
а в ответ приходит число echo json_encode(1); => 1
сделайте
echo json_encode(["result"=>$result]);