Некорректная запись первых ячеек в 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: '/' }); Верно поняла? |
Часовой пояс GMT +3, время: 18:25. |