Для комментариев зарегистрироваться или войти
Либо используйте ваш Open_ID, например аккаунт гугл, яндекс или ЖЖ
 

12 ноября 2010 :Javascript чтение массива из COOKIE, и другие функции

Ни для кого не секрет, что большинство онлайн магазинов используют cookie для хранения корзины товаров, однако для разработчиков часто бывает открытием, что куксы можно писать методом javascript. Я негодую, когда для добавления товара в корзину мне нужно покинуть страницу; недоумеваю когда  при клике грузится аякс который только и делает что ставит куксу; и совсем бешусь, после действий в корзине, когда для того чтобы пересчитать сумму мне нужно перезагрузить страницу кнопкой "пересчёт". Поэтому, с моей лёгкой руки, вот уже более 3х лет, все магазины сделанные в нашей компании %companyname% на движке %cmsname%, для разнообразных целей используют яваскриптовую запись данных в cookie.

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

Для того чтобы проще было обрабатывать установленные куксы в php, они ставятся примерно в таком виде: "shop_incart[2345]=123;", где shop_incart[2345] - имя куксы, которое php сам преобразует в массив $shop_incart. Иногда для работы с этими данными в яваскриптах, нам необходимо распарсить их в массив. Для этого я написала следующую функцию:

function read_cookie_array(name) {
        var cookies = { };
        if (document.cookie && document.cookie != '') {
                var split = document.cookie.split(';');
                for (var i = 0; i < split.length; i++) {
                        var name_value = split[i].split("=");
                        name_value[0] = name_value[0].replace(/^ /, '');
                        name_value[0]=decodeURIComponent(name_value[0]);
                        name_value[1]=decodeURIComponent(name_value[1]);
                        if(name_value[0].substring(0,name.length+1)==name+'['){
                                name_value[0]=name_value[0].substring(name.length+1,name_value[0].indexOf(']'));
                                cookies[name_value[0]] = name_value[1];
                        }
                }
        }
        return cookies;
}

Теперь, чтобы получить массив нужных значений из cookie, достаточно вызвать функцию, примерно так:

var cart_items=read_cookie_array('shop_incart');

Ну, и напоследок выложу ещё несколько функций для работы с куксами в яваскриптах. Обратите внимание на вызов escape(value) при помещении значения в куксу, это важно!

function createCookie(name,value,days) {
        if (days) {
                var date = new Date();
                date.setTime(date.getTime()+(days*24*60*60*1000));
                var expires = "; expires="+date.toGMTString();
        }
        else var expires = "";
        document.cookie = name+"="+escape(value)+expires+"; path=/";
}

function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for(var i=0;i < ca.length;i++) {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) return unescape(c.substring(nameEQ.length,c.length));
        }
        return null;
}

function eraseCookie(name) {
        createCookie(name,"",-1);
}

function get_all_cookies() {
        var cookies = { };
        if (document.cookie && document.cookie != '') {
                var split = document.cookie.split(';');
                for (var i = 0; i < split.length; i++) {
                        var name_value = split[i].split("=");
                        name_value[0] = name_value[0].replace(/^ /, '');
                        cookies[decodeURIComponent(name_value[0])] = decodeURIComponent(name_value[1]);
                }
        }
        return cookies;
}

Ссылки по теме:
Полезная статья про escape: Comparing escape(), encodeURI(), and encodeURIComponent().
Часть функций изначально были написаны Питером Кохом - http://www.quirksmode.org/js/cookies.html.

Всегда рада комментариям.


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

Комментарии:


Чтобы оставить комментарий нужно зарегистрироваться или войти.
Либо волшебно используйте ваш логин в Google, Яндекс, рамблер или ЖЖ чтобы войти через Open_ID
Оставить комментарий как:
Гость:
Сообщение:
Подпишитесь на статьи через RSS

15 самых популярных статей: