Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как создать многомерный массив (https://javascript.ru/forum/misc/9666-kak-sozdat-mnogomernyjj-massiv.html)

FRIE 31.05.2010 00:04

Как создать многомерный массив
 
function AddToCart(id,price,show_tovar,pr) {
	
	var myArr = [id,price, show_tovar, pr];
	 $.cookie("tovar", myArr);
	 var str = $.cookie("tovar");
    alert(str);
}

В скрипт приходят 4 переменные , я загоняю их в массив , а массив загоняю в куку, и теперь если у меня летит новая партия из четырех переменных то массив myArr перезаписывается, нужно создать еще один массив в котором будут храниться другие массивы например

var myArr2=[myArr] но тогда myArr2 тоже будет перезаписываться.
Как дополнить массив чтобы создавался сначала массив myArr2[0] с индексом 0 потом myArr2[1] myArr2[2] и так далее?

FRIE 31.05.2010 01:42

вот че намутил

function AddToCart(id,price,show_tovar,pr) {
	
	countArr=$.cookie("countArrr");          // 
	if (countArr == null)   //смотрим если нету countArr то создаем ее с цифрой 0
      countArr=0;
else
       countArr++;          // если есть то прибавляем 1
	   
	  var myArr = [id,price, show_tovar, pr]; // в myArr загоняем переменные
	  var myArr2=[];            // создаем массив myArr2
	 myArr2[countArr] = myArr;  // присваеваем ему индекс который вычислили и 
	 //массиву с уникальным индексом присваеваем значение myArr в котором 4 значения
	 $.cookie("tovar", myArr2);    //дальше загоняем в куку	
	 $.cookie("countArrr",countArr); //загоняем в куку полученный индекс 
	 var str = $.cookie("tovar");   // переменной str присваеваем значение куки

	 for (var i = 0; i<str.length; i++){ //перебираем массив
	  alert(str);
	 }
   
}


только алерт выдает ,,,,,,,,,17,500,4,4
если несколько раз понажимать то запятых будет еще больше например ,,,,,,,,,,,,,,,,,,,17,500,4,4
в чем косяк? добрые люди откликнитесь :)

haha 31.05.2010 07:48

переменная myArr2 должна быть внешней для этой функции, как countArr. А так она каждый раз чистая при очередном вызове функции.


var myArr2 = [];

function add2cart(a,b,c,d){
  myArr2.push([a,b,c,d]);
  $.cookie('tovar',myArr2);
  $.cookie('countArr',myArr2.length);
}
если правильно понимаю, то это должно выглядеть так.

x-yuri 31.05.2010 11:27

во-первых, у массива есть метод push
во-вторых, если ты хочешь сохранить предыдущие значения, значит их сначала из кук достать нужно
в-третьих, ты в курсе, что есть ограничение на размер куки? И непонятно, зачем в куках хранить что-либо, кроме id

FRIE 31.05.2010 15:00

1. ограничение 4096 байт, интересно сколько таких массивов сможет поместить кука - 14,500,3,3 ? сколько товаров сможет максимум заказать человек ? (я не знаю поэтому это вопрос)
2. Хранить кроме id нужно цену на товар, потомучто у одного товара например кастрюльки есть 3 размера маленькая средняя и большая , а id у них 1 поэтому надо знать какая именно кастрюлька, и еще в корзине должно появиться название этой кастрюльки и цена , может я неправильно сделал тогда поправьте, тк я всегда думал что товары корзины хранятся в куках (названия цена и количество) .
3. про то что сначала достать предыдущие значения мысль хорошая спасибо
4. про push - я писал вот так myArr2.push[a,b,c,d]; и не получалось а надо было myArr2.push([a,b,c,d]); спасибо haha

если есть мысли про корзину покупателя поделитесь или ссылку на статью дайте буду очень благодарен

x-yuri 31.05.2010 15:40

я до сих пор не понимаю, зачем хранить id в куках. Если пользователь должен залогиниться, чтобы сделать заказ, например, тогда можно вообще без id в куках. В куках будет храниться id сессии, а на сервере в сессии будут id товаров храниться, по ним сервер сможет узнать любую необходимую информацию и сгенерировать страничку. Очевдино, предполагается возможность заказа незалогиненными пользователями, поэтому храним id не в сессии на сервере, а в куках.

e1f 31.05.2010 16:04

Цитата:

Сообщение от x-yuri (Сообщение 57204)
Очевдино, предполагается возможность заказа незалогиненными пользователями, поэтому храним id не в сессии на сервере, а в куках.

Хм, а что мешает создавать сессию для всех пользователей, не только для авторизированных? При логине записываем в сессию username. Есть username в сессии - залогинен.

FRIE 31.05.2010 17:42

x-yuri вы правильно подумали, заказть должны мочь и не залогиненные пользователи,
e1f может быть и так, только можно ли яваскриптом создать сессию... пойду почитаю можно ли так

e1f 31.05.2010 18:48

FRIE, да причем тут JS вообще? Просто при получении сервером запроса типа "Добавить в корзину" и при отсутствии сессионной куки -- сессия создается новая, товар записывается туда, и в ответе приходит кука сессии. Все.

x-yuri 31.05.2010 23:38

Цитата:

Сообщение от e1f
Хм, а что мешает создавать сессию для всех пользователей, не только для авторизированных? При логине записываем в сессию username. Есть username в сессии - залогинен.

я просто думал о том, чтобы пользователь мог зайти на сайт позже и содержимое его корзины сохранилось

e1f 01.06.2010 01:25

Так ведь при наличии cookie так и будет -- корзина сохранится, главное не дропать сессии в течении некоторого времени

x-yuri 01.06.2010 02:32

они ж сами дропаются, и тут есть два варианта: либо корзина прорадает с сессией, либо мы храним корзины в БД и вручную их чистим со временем. Актуальность второго варианта под вопросом...

e1f 01.06.2010 04:07

x-yuri, что значит сами дропаются оО? Они дропнутся тогда, когда я им скажу :)

UPD Ну да, первы вариант отлично подходит. В принципе, любая долгое время не обновляющаяся сессия должна умирать, так что все нормально.

FRIE 01.06.2010 15:32

если пишу вот так
myArr2=$.cookie("tovar");       // myArr2 присваеваем значение из кук
	     if (myArr2 == null)     //   если кука пустая тобишьее нету
	       var myArr2=[];        //    создаём массив
		
	
	  function AddToCart(id,price, show_tovar, pr){   // 
	 
	         myArr2.push([id,price, show_tovar, pr]);  // добавляем в массив пришедшие значения
	         $.cookie("tovar", myArr2);                // и записываем в куку
	        
	 }


то фаербаг мне говорит myArr2.push is not a function

а если делаю вот так
if (myArr2 == null)
	       var myArr2=[]; 
		 else
        myArr2=$.cookie("tovar");
	
	  function AddToCart(id,price, show_tovar, pr){
	 
	         myArr2.push([id,price, show_tovar, pr]);
	         $.cookie("tovar", myArr2);  
	        
	 }

то в куку всё прекрасно добавляет только если обновить страницу то кука обнуляется , тоесть из-за этой строчки myArr2=$.cookie("tovar"); он ругается на эту myArr2.push([id,price, show_tovar, pr]); почему так происходит?

x-yuri 01.06.2010 15:51

myArr2=$.cookie("tovar");       // myArr2 присваеваем значение из кук 
console.log(myArr2, myArr2 instanceof Array, myArr2 == null);
         if (myArr2 == null)     //   если кука пустая тобишьее нету            var myArr2=[];        //    создаём массив

FRIE 01.06.2010 16:46

непонял ?... в консоли пишет
[] 18,1600,10,12,14,800,5,6 false false

FRIE 01.06.2010 17:09

как понимаю - в $.cookie("tovar") у нас есть данные, и даже после перезагрузки страницы, только на строчку
myArr2.push([id,price, show_tovar, pr]);
он ругается -
myArr2.push is not a function


ему синтаксис не нравится?

Kolyaj 01.06.2010 17:11

В куках могут лежать только строки. Всё, что вы туда кладёте, преобразуется в строку, и вытаскивается оттуда в виде строки.

FRIE 01.06.2010 17:15

тоесть когда я сделал вот так myArr2=$.cookie("tovar");
то в myArr2 у меня записалась строка а не массив?
а массив кстати это же и есть строка в которой перечислены значения через запятую..
я запутался что-то =)

FRIE 01.06.2010 17:20

аа точно console.log(myArr2, myArr2 instanceof Array, myArr2 == null);
вот эта строка говорит следущее
myArr2 =18,1600,10,12,14,800,5,6
myArr2 instanceof Array=false
myArr2=false
а как тогда обратно из этой каши сделать массив?

рони 01.06.2010 18:55

FRIE,
split

FRIE 01.06.2010 19:56

нет, всётаки я почитал про типы данных и выяснил что myArr2 когда ему присваевается значение куки является обьектом- массивом

и кука обнуляется когда перезагружаешь страницу

if (myArr2 == null)
	       var myArr2=[]; 
		 else
     var   myArr2=$.cookie("tovar");
		
	  function AddToCart(id,price, show_tovar, pr){
	         myArr2.push([id,price, show_tovar, pr]);
	         $.cookie("tovar", myArr2); 
           console.log(myArr2, myArr2 instanceof Array, myArr2 == null);
	         alert($.cookie("tovar"));
	 }


тоесть кука записывается но потом удаляется.(((( почему так?

FRIE 01.06.2010 21:41

Дапер дапёер дапёр дапёр!!!!!!!!!!!!!!! :dance: :dance: :dance: :dance: :dance: :dance: :dance: :dance: :dance: :dance: :dance:

function AddToCart(id,price, show_tovar, pr){
		       myArr2=[$.cookie("tovar")];
        if(myArr2 == ''){
	        var myArr2=[];
	  }
	       myArr2.push([id,price, show_tovar, pr]);
	         $.cookie("tovar", myArr2);  	
			 console.log(myArr2, myArr2 instanceof Array, myArr2 == null);		
	 }


x-yuri haha e1f Парни спасибо огромное за помощь!!!! :thanks: :thanks: :thanks: :thanks: :thanks:

x-yuri 02.06.2010 03:17

ты думаешь? Мы пытались помочь, но у нас не получилось ;)

e1f, ну я в общем-то говорил про стандартные php-сессии, а ты? Если закрыть браузер, сессия считай пропадает, потому что кука ставится сессионная. А на сервере она автоматически удаляется через какое-то время, или может я чего не знаю...

e1f 02.06.2010 03:52

x-yuri, а, ну да :) Просто я на Perl'e привык к самописным сессиям, которые пропадают тогда, когда я скажу :) Да и на php наверняка можно настроить так, чтобы сесси работали должным образом -- с очисткой maintenance скриптом, а не по времени.

FRIE 02.06.2010 09:52

Цитата:

Сообщение от x-yuri (Сообщение 57489)
ты думаешь? Мы пытались помочь, но у нас не получилось ;)

а чего не получилось? в куку циферки загнали, они никуда не исчезают (при переходе со страницы на страницу), теперь нужно обработать эти циферки в нужном порядке :)

e1f 02.06.2010 12:00

FRIE, использовать cookie для хранения данных -- идея говно

FRIE 02.06.2010 17:02

Цитата:

Сообщение от e1f (Сообщение 57533)
FRIE, использовать cookie для хранения данных -- идея говно

если не трудно обьясните плиз как лучше будет делать, где хранить выбранные товары?

haha 02.06.2010 17:39

Сильно кажется, что пишется велосипед не с квадратными колесами, а с треугольными. Однако, хочу предложить очень пафосный и сложный в исполнении вариант, вебдванольный интернет-магазин, где:
-список товаров подгружается ajax-ом
-множество выбранных товаров, Корзину, хранится в массивах на обеих сторонах, у клиента js-массив и на сервере контейнер в сессии
-причем, на клиенте корзина еще и в виде формы, готовой для покупки

Вот тут-то куки могут и не понадобиться.

FRIE 02.06.2010 19:14

Цитата:

Сообщение от haha (Сообщение 57584)
Сильно кажется, что пишется велосипед не с квадратными колесами, а с треугольными. Однако, хочу предложить очень пафосный и сложный в исполнении вариант, вебдванольный интернет-магазин, где:
-список товаров подгружается ajax-ом
-множество выбранных товаров, Корзину, хранится в массивах на обеих сторонах, у клиента js-массив и на сервере контейнер в сессии
-причем, на клиенте корзина еще и в виде формы, готовой для покупки

Вот тут-то куки могут и не понадобиться.

Расскажу вам всю историю гемороя с самого начала

сделал я так: у товара есть ссылка по клику вызывается функция которая аяксом обращяется в php скрипту, а тот записывает в базу в таблицу корзины товар, и соответственно берет все товары которые уже есть и аяксом подргужает обратно на сайт, но трудности с которыми я столкнулся при этом вынудили сделать корзину на стороне клиента. в чем проблема - да в том что для того чтобы инициализировать юзера нужно передавать идентификатор , я параноик по этому мне кажется что так нельзя делать ,может и можно просто я понять этого не могу, и награжать сервер и базу запросами тоже не хочется, а раз есть вариант делать все это на стороне клиента то почему бы и да. а как же тогда делают все? в инете нету вообще инструкций по созданию крозины есть только готовые варианты в которых куча бесполезных функций и кода да и переделывать их надо будет, а разбираться в чужом не закомментированном коде неохота, да и корзины эти состоят из нескольких а то и из десятков файлов

мне не нужны готовые магазины и скрипты, у меня особенный магазин поэтому врятли чтото подойдёт:)))

Поэтому тогда попрошу всех кто может поделиться своим опытом и рассказать немного как технически делаются корзины, плюсы и минусы, нюансы там.... )


Часовой пояс GMT +3, время: 19:08.