Не хватает кавычки
11 str+='<p class="item-'+i+'-'+arItem[j]+'">'+zJ[j]+'</p>\n |
Цитата:
|
не в том суть повторного сбора в строку.
Данные отправляются не скрытым полем, а обычным через $_POST. Мне нужно повторно собрать данные в строку для случая, если пользователь решит не отправлять форму, а вернётся в магазин и продолжит добавлять товары. Тогда произойдёт переход на другую страницу, и изменённые данные (например удаление какого-нибудь из товаров) не сохранятся. Поэтому по событию нажатия любой кнопки удаления товара я собираю массивы в строку в то же состояние, из которого я их и доставал. такая вот камасутра ) Но сначала нужно поспать )) Слегка изменил функцию разбора строки в массивы (в основном я поменял местами элементы массива, добавил комментарии между элементами и вывод новой суммы если к примеру количество больше одного):
var a = $.cookie("basket");
var b = a.replace(/;\s*$/,'').split(";");
function allItemsListConstruct (Z) {
var str ='',zJ;
for (var i=0; i<Z.length; i++){
str+='<div>\r\n';
zJ = Z[i].split(":");
var itemPriceFinal = zJ[2] * zJ[1];
str+=
'<p class="item-name">'+zJ[0]+'</p> ('+
'<p class="item-size">'+zJ[3]+'</p> '+
'<p class="item-color">'+zJ[4]+'</p> '+
'<p class="item-price">'+zJ[2]+'</p> грн.) - '+
'<p class="item-copy">'+zJ[1]+'</p> шт. (' +
'<p class="item-price-final">'+itemPriceFinal+'</p> грн.)'
;
str+='\r\n</div>\r\n'
} return str;
}
var allItemsList = allItemsListConstruct (b);
|
Цитата:
function setValue(key,Value) {
localStorage.setItem(key,Value)
alert('Записалось ... \n' + key+':'+Value)
}
//Записываем Данные
var key='price', Value='Цена2';
setValue(key,Value)
var key='size', Value='600'
setValue(key,Value)
function getValue(key) {
return localStorage.getItem(key);;
}
//Читаем Данные
var key='price';
alert(key+"="+getValue(key));
var key='size';
alert(key+"="+getValue(key));
Можно перезагрузить страницу и запустить второй скрипт |
Всё же я хочу сначала попробовать способ сбора массива в строку, т.к. данных будет немного (максимум 10 товаров, в записанном куки это не превысит и килобайта я думаю).
P.S. это не товары в магазине, а уже выбранные покупателем товары в корзине, поэтому длина строки будет небольшая. Вот то, из чего я буду собирать в строку: <div class="item"> <p class="item-array item-name">T-Shirt</p> <p class="item-array item-size">размер S</p> <p class="item-array item-color">цвет белый</p> <p class="item-array item-price">170</p> грн. <p class="item-array item-copy">4</p> шт. </div> <div class="item"> <p class="item-array item-name">Jeans</p> <p class="item-array item-size">размер XS</p> <p class="item-array item-color">цвет синий</p> <p class="item-array item-price">420</p> грн. <p class="item-array item-copy">2</p> шт. </div> и начало моих размышлений:
basketNew = new Array ($('.item-array').text()); // создание массива из элементов класса
// $.cookie("basket", basketNew); // запись в куки
Но массив не получился, т.к. данные просто склеились. Выглядит это вот так: T-Shirtразмер Sцвет белый1704Jeansразмер XSцвет синий4202 а должно так, где элементы каждого товара разделены двоеточием, а товары разделены точкой с запятой: T-Shirt:размер S:цвет белый:170:4;Jeans:размер XS:цвет синий:420:2; То есть нужно создать массив из всех <div class="item"></div> с разделителем ";", в каждом из которых будет массив из дочерних <p class="item-array item-price"></p> с разделителем ":". |
Цитата:
А для сбора всего массива и отсылки суммарного на сервер или перепарса на странице - есть методы доступа к localStorage Либо пишите/читает строку в один ключ По ключам (по опыту удобнее) В Один ключ - это подобие куков, но каждый раз при добавке - смене товара придется распаковывать данные, (в куках таже проблема, с заменой - добавкой товара, Сбор по ключам и объединение для отсылки или распарса на странице (- ксать для распарса на очередной странице - даже не надо объединять, Главное чтобы нулевой ключ(заранее известный) - имел массив всех ключей, нужных для перебора |
ТЗ нечеткое.
Я так понял, в итоге нужна строка, а не массив. Хотя я советовал бы думать о будущем и о юзабилити. И оперировать таки с массивом, а не со строкой. Но ладно, пусть будет строка. Итак, пишем сразу строку var str = ''; //инициализируем пустую строку $('div.item').each(function(){ $(this).children('p').each(function(){ str += $(this).html() + ":";//пишем хар-ку товара + ":" }); str += ";"//отделяем товар + ";" }); ЗЫ: да, знаю, в конце будем получать не ";", а ":;", но если дальше правильно парсить - не имеет значения и не стоит лишней строки кода здесь. |
jokersoft,
:) Cобствна вопрос - (не юзал jQuery.cocie) Во всех ли браузерах воспринимает произвольные символы в данных для куков (В обычных куках, к примеру - русские(в FF) не воспринимаются, перевод в ескейп последовательность - может превысить длину кука в ИЕ(она возрастет примерно раза в 4 |
Адаптировал код jokersoft:
var strCookie = ''; //инициализируем пустую строку
$('div.item').each(function(){
$(this).children('p:eq(0)').each(function(){ strCookie += $(this).html() + ":"; }); // количество характеристик всегда будет 5
$(this).children('p:eq(1)').each(function(){ strCookie += $(this).html() + ":"; });
$(this).children('p:eq(2)').each(function(){ strCookie += $(this).html() + ":"; });
$(this).children('p:eq(3)').each(function(){ strCookie += $(this).html() + ":"; });
$(this).children('p:eq(4)').each(function(){ strCookie += $(this).html(); }); // таким образом я убрал последний ":" в каждом товаре
strCookie += ";" //отделяем товар + ";"
});
Результат получился такой: T-Shirt:размер S:цвет белый:170:4;;;Jeans:размер XS:цвет синий:420:2;;;Shoes:размер 41:цвет хаки:560:1;;; Это работает, но лишние разделители при следующих запросах строки из куки будут создавать пустые товары.. Сейчас после каждого товара разделитель не один ";" а их столько, сколько и товаров всего :/ Подскажите как правильно парсить, чтобы привести строку в такой вид: T-Shirt:размер S:цвет белый:170:4;Jeans:размер XS:цвет синий:420:2;Shoes:размер 41:цвет хаки:560:1; P.S. в следующих сообщениях уже исправил ) |
mi.rafaylik,
1. Составьте список используемых браузеров( с версиями для ИЕ 2. Приведите полный вид максимально длинной строки заказов отправляемой на сервер 3. Если использовать не куки - то способ отправки через форму - подойдёт ? |
| Часовой пояс GMT +3, время: 02:53. |