Ошибка при создании cookie
Я смотрел 10. Избранное. 01. Скрипт добавления товара в избранное с 11:30-13:30 и смотрел 10. Избранное. 02. Добавление в избранное из карточка товара. Там приведен код добавления и удаления элемента массива (товара в Избранное) в сookie
При щелчке на кнопке В избранное
выдает следующую ошибку
mylasttechnoshop.ru/:1 Uncaught SyntaxError: Unexpected token 'M', "M_SOUND_LO"... is not valid JSON
at JSON.parse (<anonymous>)
at actionFav (template_6562e590b8b8f11da8d97dd8909fa6e1_v1.js?1683716626196502:89:22)
at HTMLAnchorElement.<anonymous> (template_6562e590b8b8f11da8d97dd8909fa6e1_v1.js?1683716626196502:80:4)
at HTMLBodyElement.dispatch (template_6562e590b8b8f11da8d97dd8909fa6e1_v1.js?1683716626196502:5:10315)
at q.handle (template_6562e590b8b8f11da8d97dd8909fa6e1_v1.js?1683716626196502:5:8342)
actionFav @ template_6562e590b8b8f11da8d97dd8909fa6e1_v1.js?1683716626196502:89
(anonymous) @ template_6562e590b8b8f11da8d97dd8909fa6e1_v1.js?1683716626196502:80
dispatch @ template_6562e590b8b8f11da8d97dd8909fa6e1_v1.js?1683716626196502:5
q.handle @ template_6562e590b8b8f11da8d97dd8909fa6e1_v1.js?1683716626196502:5
mylasttechnoshop.ru/:1
Файл, в котором создаются cookie имеет вид
$(document).ready(function(){
//слайдер на главной
$(".index_slider").bxSlider({
mode: 'fade',
touchEnabled: false
});
//стилизация форм
$(".filter_bl input:checkbox, .filter_bl input:radio, .styler input:radio, .styler input:checkbox, .styler select, .styler input:file").styler();
//табы в детальной
$('body').on('click', 'ul.tabs li:not(.current)', function() {
$(this).addClass('current').siblings().removeClass('current')
.parents('div.section').find('div.box').eq($(this).index()).fadeIn(150).siblings('div.box').hide();
});
//слайдер в детальной
$(".det_slider").bxSlider({
mode:'fade',
controls: false,
pagerCustom: '#det_pager'
});
$(".det_pager").bxSlider({
minSlides: 1,
maxSlides: 4,
moveSlides: 1,
slideWidth: 70,
slideMargin: 20,
pager: false,
infiniteLoop: false
});
$("body").on('click', '.favor_bt', function() {
let id = $(this).data('id');
if ($(this).hasClass('active')) {
actionFav('del', id);
$(this).removeClass('active');
} else {
actionFav('add', id);
$(this).addClass('active');
};
return false;
});
function actionFav(action, id)
{
var favorite = JSON.parse(getCookie('favorite'));
if (favorite == null || !(favorite instanceof Array))
favorite = [];
var inArr = false;
// проверим существование товара в массиве избранного
for (i=0; i<favorite.length; i++) {
if (favorite[i] == id) {
if (action == 'del') { favorite.splice(i, 1); };
inArr = true;
}
}
// если товара нет в корзине, то добавим
if (action == 'add' && (!inArr)) { favorite.push(id); };
var d = new Date();
d.setMonth(d.getMonth() + 1);
setCookie ('favorite', JSON.stringify(favorite), d.toUTCString(), '/');
return favorite;
}
function setCookie (name, value, expires, path, domain, secure)
{
document.cookie = name + "=" + escape(value) +
((expires) ? "; expires=" + expires : "") +
((path) ? "; path=" + path : "") +
((domain) ? "; domain" + domain : "") +
((secure) ? "; secure" + secure : "");
}
function getCookie(name)
{
var cookie = " " + document.cookie;
var search = " " + name + "=";
var setStr = null;
var offset = 0;
var end = 0;
if (cookie.length > 0) {
offset = cookie.indexOf(search);
if (offset != 1) {
offset += search.length;
end = cookie.indexOf(";", offset);
if (end != -1) {
end = cookie.length;
}
setStr = unescape(cookie.substring(offset, end));
}
}
return setStr;
}
});
Как устранить ошибку?
P.S. Перед
var favorite = JSON.parse(getCookie('favorite'));
вывел с помощью
console.log(getCookie('favorite'));
и получил
M_SOUND_LOGIN_PLAYED=Y; BITRIX_SM_GUEST_ID=1; by=ID; sort=ASC; BX_USER_ID=67d746fcc40c5f11f4bf433377a26694; BITRIX_CONVERSION_CONTEXT_s1={"ID":1,"EXPIRE":1683752340,"UNIQUE":["conversion_visit_day"]}; BITRIX_SM_SALE_UID=233876e435a02034b36c4e8bfbe22e45; BITRIX_SM_LAST_SETTINGS=; BITRIX_SM_LAST_VISIT=10.05.2023 15:25:13
Еще забыл упомянуть, что ссылка В избранное имеет вид
<a class="favor_bt <?=(in_array($arResult['ID'], $arParams['FAVORITE']) ? 'active' : '');?>" data-id="<?=$arResult['ID']?>" href="javascript:;">В избранное</a>
Также из инструментов разработчика есть следующая информация
Источник: Stack Overflow на русском