Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.01.2016, 16:04
Интересующийся
Отправить личное сообщение для ivt22 Посмотреть профиль Найти все сообщения от ivt22
 
Регистрация: 03.01.2016
Сообщений: 12

Cookie, localStorage как сделать корзину?
Добрый день, никак не могу разобраться как мне решить задачу, необходимо сделать что-то типо корзины товаров, но так что бы добавил товаров в корзину, перешел на другую страницу, а корзина с твоими товарами за тобой бегает и товары оттуда никуда не деваются, я пробовал Cookie, пробовал localStorage Вот тут даже пример есть http://incode.pro/javascript/sozdaem...alstorage.html
Но во всех вариантах, как только обновишь страницу или перейдешь на другую все данные из корзины пропадают, все Cookie очищаются и там уже нет ранее добавленных переменных, я думал каждое добавление товара записывать в файл с названием ввиде IP пользователя и потом при загрузке страницы читать этот файл и добавлять все товары обратно в корзину, так JavaScript не может ни создавать, ни записывать в файл ничего.
Ответить с цитированием
  #2 (permalink)  
Старый 13.01.2016, 16:52
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Товар добавляется в корзину через сервер, то есть сервер должен знать об этом событии в любом случае, а значит и может их хранить у себя и выводить корзину на любой странице, а также записать и в Cookie клиенту, если надо. В localStorage может записать только клиент. Если у вас не сохраняется, значит не верно делалось. Код бы свой показали.
Ответить с цитированием
  #3 (permalink)  
Старый 13.01.2016, 22:55
Интересующийся
Отправить личное сообщение для melst Посмотреть профиль Найти все сообщения от melst
 
Регистрация: 26.11.2015
Сообщений: 28

Я тоже сейчас над такой темой бьюсь. Я на jQuery делаю быструю корзину в определенном блоке на странице, чтоб без перезагрузки и делаю отдельную страницу корзины где уже просто PHP генерит.
Делаю файл обработчик, который срабатывает при нажатии "в корзину". Передается id товара и еще некоторые параметры с помощью ajax и в обработчике происходит выборка из БД и создание json. Json возвращается обратно в js и записывается в sessionStorage, а затем проверка по id на предмет повторений товаров и формирует быструю корзину. В обработчике данные остаются для последующего отображения на полноценной странице корзины.
Я примерно так придумал. Немного тов. Lemme помогает.

Последний раз редактировалось melst, 13.01.2016 в 23:00.
Ответить с цитированием
  #4 (permalink)  
Старый 14.01.2016, 11:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от melst
а затем проверка по id на предмет повторений товаров и формирует быструю корзину
О какой проверке речь и что значит "быстрая корзина"?
Ответить с цитированием
  #5 (permalink)  
Старый 14.01.2016, 16:49
Интересующийся
Отправить личное сообщение для ivt22 Посмотреть профиль Найти все сообщения от ivt22
 
Регистрация: 03.01.2016
Сообщений: 12

Сообщение от laimas Посмотреть сообщение
Товар добавляется в корзину через сервер, то есть сервер должен знать об этом событии в любом случае, а значит и может их хранить у себя и выводить корзину на любой странице, а также записать и в Cookie клиенту, если надо. В localStorage может записать только клиент. Если у вас не сохраняется, значит не верно делалось. Код бы свой показали.
http://incode.pro/javascript/sozdaem...alstorage.html

Так я вот это скопировал для примера

Или вот пытался пробовать
<a href="" onclick=setCookie("lastname", "Катя");>КУК</a>
	<a href="#" onclick=getcook();>||| Получить</a>


-----

function getcook()
  {
	alert(document.cookie);
  }
  
  //Установить Cookie
  function setCookie(name, value) {
    document.cookie = name + "=" + value;
  }


Кнопочкой КУК устанавливаю Cookie но если страницу обновить то тут же все исчезает. Видимо я как-то неправильно понял работу Cookie
Ответить с цитированием
  #6 (permalink)  
Старый 14.01.2016, 17:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

https://learn.javascript.ru/cookie

Но зачем именно куки? Если они устанавливаются только с параметром name, то это будут сессионные куки, которые не будут сохранены браузером после закрытия страницы. С тем же успехом сервер в свою сессию может записать данные корзины и выводить ее на страницах, ведь страницы все равно формирует он.

Другое дело, что куки используются для того, чтобы пользователь мог продолжить набор в корзину, спустя время, но тогда нужно устанавливать не сессионные куки.
Ответить с цитированием
  #7 (permalink)  
Старый 14.01.2016, 21:48
Интересующийся
Отправить личное сообщение для melst Посмотреть профиль Найти все сообщения от melst
 
Регистрация: 26.11.2015
Сообщений: 28

Сообщение от laimas Посмотреть сообщение
О какой проверке речь и что значит "быстрая корзина"?
)) "быстрая корзина" это я так обозвал блок где появляются товары без перезагрузки страницы, т.е. не основная страница корзины.
Проверку вот уже думаю делать когда данные в обработчик PHP поступают или в скрипте, когда данные назад приходят. Но при таком раскладе при создании основной страницы корзины опять проверка нужна будет. Сама проверка состоит в проверке повторений id.

В обработчике так записываю id каждого товара.
session_start();
if (!isset($_SESSION['id'])) {
    $_SESSION['id'] = array();
   
}
array_push($_SESSION['id'], $id);

Кстати, я заметил, что $_SESSION и sessionStorage по разному избавляются от данных. Первое хранилище только по закрытию браузера, а второе по закрытию вкладки. Правильно?


PS Надо тоже об КУКАХ задуматься.

Последний раз редактировалось melst, 14.01.2016 в 21:54.
Ответить с цитированием
  #8 (permalink)  
Старый 15.01.2016, 06:34
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

$_SESSION не избавляется от данных, это просто суперглобальный массив. Избавиться от данных в нем, это только выполнить такую операцию. Что касается жизни сессии, то по умолчанию она равна 24 минутам, но это не означает, что именно по истечении этого времени ее не будет, она умрет, да, но сборщик мусора не обязательно удалит ее, он работает по своему алгоритму.

Как поступает браузер с файлом своей не знаю, да это и не важно. Гораздо важнее, что нет смысла использовать сессию на сервере и на клиенте, вы ведь ни в чем не выигрываете в этом случае. Более того, добавление товара, это обязательно хотя бы элементарная проверка его наличия, то есть это запрос сервера, серверу и хранить корзину. А учитывая, что у корзины два представления, и если речь идет о кратком ее представлении, и добавление товаров, это асинхронные запросы, то ответ сервера должен содержать информацию об этом представлении, которое нужно оперативно обновлять на клиенте. Все, больше клиенту ничего не надо.

Полное представление корзины, это вообще может быть отдельная страница, ибо может заключать в себе массу операций над товарами корзины. Но в данном случае также как и в первом - клиент это всего лишь интерфейс и взаимодействие с сервером, а корзина как была на сервере, так и есть там.
Ответить с цитированием
  #9 (permalink)  
Старый 15.01.2016, 09:18
Интересующийся
Отправить личное сообщение для melst Посмотреть профиль Найти все сообщения от melst
 
Регистрация: 26.11.2015
Сообщений: 28

Сообщение от laimas Посмотреть сообщение

А учитывая, что у корзины два представления, и если речь идет о кратком ее представлении, и добавление товаров, это асинхронные запросы, то ответ сервера должен содержать информацию об этом представлении, которое нужно оперативно обновлять на клиенте. Все, больше клиенту ничего не надо.
А как быть с данными которые получены асинхронно при обновлении страницы или переходе на другую? Я sessionStorage только для этого использую. Если просто переход без добавления товара , то корзина берется из сессии клиента, если опять добавляется товар, то делается запрос. Как сделать по-другому я пока не знаю. Если только каждый раз запросы делать.
Ответить с цитированием
  #10 (permalink)  
Старый 15.01.2016, 09:23
Интересующийся
Отправить личное сообщение для ivt22 Посмотреть профиль Найти все сообщения от ivt22
 
Регистрация: 03.01.2016
Сообщений: 12

Сообщение от laimas Посмотреть сообщение
https://learn.javascript.ru/cookie

Но зачем именно куки? Если они устанавливаются только с параметром name, то это будут сессионные куки, которые не будут сохранены браузером после закрытия страницы. С тем же успехом сервер в свою сессию может записать данные корзины и выводить ее на страницах, ведь страницы все равно формирует он.

Другое дело, что куки используются для того, чтобы пользователь мог продолжить набор в корзину, спустя время, но тогда нужно устанавливать не сессионные куки.
а мне как раз нужно что-то, что сохранялось бы при обновлении страницы и при переходе на другую страницу, что бы я мог таскать список товаров за пользователем, я новичек и книжку по JavaScript только начал читать, а задачу мне срочно нужно как-то решить. Потому что срок пробной версии Битрикса заканчивается через 4 дня и если я не успею клиенту показать рабочий вариант, то он не оплатит Битрикс. И тогда месяц работы коту под хвост. Вот я и прошу помощи, потомучто самостоятельно я никак не успеваю разобраться.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сделать проверку на display: block; ufaclub jQuery 3 22.12.2013 19:21
Как сделать калькулятор и с чего начать? A.P. Yellowman Общие вопросы Javascript 3 15.11.2013 21:32
Как убрать hover? Либо как сделать стрелки статичными? krusty36 Элементы интерфейса 1 13.07.2011 09:20
Как удолить cookie через javascript shtopor Javascript под браузер 5 22.03.2011 23:10
Как сделать, чтобы при наведении на кнопку справа от нее появлялись текстовые ссылки? Tass Общие вопросы Javascript 7 17.02.2011 09:06