Некорректная запись первых ячеек в cookie
Вложений: 3
Здравствуйте.
Скрипт последних просмотренных пользователем страниц. Добавляет id страниц в куки. <script> $(document).ready(function() { var pageid = {%$page%}; var view = $.cookie('lastpage'); $.cookie('lastpage', view, { expires: 60, path: '/' }); if (!view){ view = []; } else { view = view.replace(/(^,)|(,$)/g, ''); var idArray = view.split(','); if(idArray.length > 10){ idArray.shift(); view = idArray.toString(); } } if (view.indexOf(pageid) === -1) { if (view) { view += ',' + pageid; } else { view = '' + pageid; } $.cookie('lastpage', view, { expires: 60, path: '/' }); } }); </script> Суть проблемы, первые 2 просмотренные страницы некорректно записываются в ячейки (46 - id первой просмотренной страницы, 29 - второй, 5 - третьей): lastpage:Object :"46" lastpage:Object 46:"29" И только начиная с 3 страницы ячейки начинают записываться корректно: lastpage:Array 1:"46" 2:"29" 3:"5" length:3 Из-за некорректной записи первых двух ячеек, некоторые страницы с id: 4,6,2,9 в куки не записываеются, т.к. браузер считает что они уже записаны(просмотрены). Подскажите, пожалуйста, где я ошиблась и как исправить. |
Вы определитесь, что у вас view - массив или строка?
Строки 17-21. В каком случае else сработает? Да и не знаем мы, что такое {%$page%} и как оно вычисляется |
dasha862,
строка 17 всегда true. попробуйте if (view.length) |
dasha862,
как вариант ... $(document).ready(function() { var pageid = {%$page%}; var view = $.cookie('lastpage'); if (!view) { view = [+pageid]; } else { view = JSON.parse(view); if (view.indexOf(+pageid) === -1) { view.push(+pageid); if (view.length > 10) view.shift(); } } view = JSON.stringify(view); $.cookie('lastpage', view, { expires: 60, path: '/' }); }); |
Цитата:
Как удалить скобки [ и ] на выходе из скрипта, чтобы осталось 4, без скобок? |
dasha862,
не осилил. |
Попробовала реплейсом убрать
view = view.replace(/[[\]]/g, ''); Но это создаёт другую проблему, записывается id только первой страницы, а остальные игнорируются. Вы правы, простым реплейсом дело не решить:) |
рони,
Решила на стороне php. Спасибо Вам огромное за готовый скрипт! |
Цитата:
var view = $.cookie('lastpage'); view = JSON.parse(view) || []; view = view.toString(); |
Ваш код ставить перед:
$.cookie('lastpage', view, { expires: 60, path: '/' }); Верно поняла? |
Ещё один вопрос, если не сложно. Например, зашла на страницы с id: 1,2,3,4,5 и затем повторно зашла на страницу с id 3.
Подскажите, пожалуйста, как поставить в конец очереди id ранее просмотренной страницы? То есть чтобы получилось 1,2,4,5,3 Пробовала так: if (view.includes(pageid) === true){ view.push(+pageid); } Не помогло. |
dasha862,
let view = [1,2,3,4,5], pageid = '3', index; pageid = Number(pageid); index = view.findIndex(i => i === pageid); if(index !== -1) { view.splice(index, 1); view.push(pageid); }; alert(JSON.stringify(view)); |
Цитата:
const ind = view.indexOf(+pageid) if (ind >= 0) view.splice(ind, 1); view.push(+pageid); |
voraa, Великолепно! :dance: |
Ребята, большущее спасибо за ваше время и помощь! Три дня мучалась, очень-очень меня выручили, спасибо!
|
Часовой пояс GMT +3, время: 09:59. |