Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.12.2022, 11:32
Аспирант
Отправить личное сообщение для dasha862 Посмотреть профиль Найти все сообщения от dasha862
 
Регистрация: 31.03.2016
Сообщений: 36

Некорректная запись первых ячеек в cookie
Здравствуйте.

Скрипт последних просмотренных пользователем страниц. Добавляет 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 в куки не записываеются, т.к. браузер считает что они уже записаны(просмотрены).
Подскажите, пожалуйста, где я ошиблась и как исправить.
Изображения:
Тип файла: png 1.png (3.6 Кб, 1 просмотров)
Тип файла: png 2.png (3.8 Кб, 1 просмотров)
Тип файла: png 3.png (4.4 Кб, 1 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 27.12.2022, 12:36
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Вы определитесь, что у вас view - массив или строка?
Строки 17-21. В каком случае else сработает?
Да и не знаем мы, что такое {%$page%} и как оно вычисляется
Ответить с цитированием
  #3 (permalink)  
Старый 27.12.2022, 13:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

dasha862,
строка 17 всегда true. попробуйте
if (view.length)
Ответить с цитированием
  #4 (permalink)  
Старый 27.12.2022, 13:15
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

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: '/'
            });
        });
Ответить с цитированием
  #5 (permalink)  
Старый 27.12.2022, 14:02
Аспирант
Отправить личное сообщение для dasha862 Посмотреть профиль Найти все сообщения от dasha862
 
Регистрация: 31.03.2016
Сообщений: 36

Сообщение от рони Посмотреть сообщение
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: '/'
            });
        });
В этом случае возникает проблема с %5B и %5D. На выходе значение имеет вид: %5B4%2C%5D - то есть [4,]. Из-за это у меня возникает синтаксическая ошибка в обработчике PHP.
Как удалить скобки [ и ] на выходе из скрипта, чтобы осталось 4, без скобок?
Ответить с цитированием
  #6 (permalink)  
Старый 27.12.2022, 14:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

dasha862,
не осилил.
Ответить с цитированием
  #7 (permalink)  
Старый 27.12.2022, 14:46
Аспирант
Отправить личное сообщение для dasha862 Посмотреть профиль Найти все сообщения от dasha862
 
Регистрация: 31.03.2016
Сообщений: 36

Попробовала реплейсом убрать
view = view.replace(/[[\]]/g, '');


Но это создаёт другую проблему, записывается id только первой страницы, а остальные игнорируются.
Вы правы, простым реплейсом дело не решить
Ответить с цитированием
  #8 (permalink)  
Старый 27.12.2022, 15:20
Аспирант
Отправить личное сообщение для dasha862 Посмотреть профиль Найти все сообщения от dasha862
 
Регистрация: 31.03.2016
Сообщений: 36

рони,

Решила на стороне php.

Спасибо Вам огромное за готовый скрипт!
Ответить с цитированием
  #9 (permalink)  
Старый 27.12.2022, 15:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от dasha862
Как удалить скобки [ и ]
можно только гадать с чем у вас проблема.

var view = $.cookie('lastpage');
view = JSON.parse(view) || [];
view = view.toString();
Ответить с цитированием
  #10 (permalink)  
Старый 27.12.2022, 15:53
Аспирант
Отправить личное сообщение для dasha862 Посмотреть профиль Найти все сообщения от dasha862
 
Регистрация: 31.03.2016
Сообщений: 36

Ваш код ставить перед:
$.cookie('lastpage', view, {
expires: 60,
path: '/'
});

Верно поняла?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запись и чтение cookie Fox- Javascript под браузер 4 13.01.2022 19:30
Запись в cookie значения id Warycooper jQuery 19 08.12.2016 14:11
Как удалить DIV если есть запись в cookie zahar_92 jQuery 3 13.05.2016 14:44
запись cookie Valentinka_1 jQuery 2 09.06.2014 08:16
Запись массива в cookie KonstantinK Общие вопросы Javascript 4 19.03.2011 20:30