Javascript.RU

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

Массив в cookie
Здравствуйте!

Вывожу список файлов с помощью JQ, решил подсветить файлы которые уже были скачены.

Запнулся на добавлении элемента в массив, который лежит в cookie (4стр.), подскажите как правильно это сделать ?!
$("#result").listen("click", "a.file", function(){
if($.cookie('user_dwnl_files'))
	if($.inArray($(this).attr('id'), $.cookie('user_dwnl_files')) == '-1'){
		$.cookie('user_dwnl_files').push($(this).attr('id'));
		$(this).addClass('dwnl');
	}
else
    $.cookie('user_dwnl_files', [$(this).attr('id')]);
});
Ответить с цитированием
  #2 (permalink)  
Старый 26.12.2010, 13:37
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

Лучше хранить в куках массив в JSON-виде (В куках, напоминаю, все хранится в строковом представлении). Соответственно, при извлечении из кук нужно конвертировать строковое представление массива в нормальный массив (и работать с ним как с обычным массивом), а при записи конвертировать в строковое представление.
Ответить с цитированием
  #3 (permalink)  
Старый 26.12.2010, 14:08
Профессор
Отправить личное сообщение для Andrei Посмотреть профиль Найти все сообщения от Andrei
 
Регистрация: 31.10.2009
Сообщений: 151

B@rmaley.e><e, Ок!
А чем кодировать в JSON ?
Ответить с цитированием
  #4 (permalink)  
Старый 26.12.2010, 14:53
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

В современных браузерах есть нативные средства для работы с JSON. Для старых есть реализация на JS. См. тут.
Ответить с цитированием
  #5 (permalink)  
Старый 26.12.2010, 14:56
Аватар для Vulkan
Профессор
Отправить личное сообщение для Vulkan Посмотреть профиль Найти все сообщения от Vulkan
 
Регистрация: 25.05.2010
Сообщений: 511

Чтобы превратить строковое представление в массив, нужно воспользоваться функцией eval():
eval("(" + json_string + ")");

А чтобы превратить массив в строковое представление:
/**
 * Converts the given data structure to a JSON string.
 * Argument: arr - The data structure that must be converted to JSON
 * Example: var json_string = array2json(['e', {pluribus: 'unum'}]);
 * 			var json = array2json({"success":"Sweet","failure":false,"empty_array":[],"numbers":[1,2,3],"info":{"name":"Binny","site":"http:\/\/www.openjs.com\/"}});
 * [url]http://www.openjs.com/scripts/data/json_encode.php[/url]
 */
function array2json(arr) {
    var parts = [];
    var is_list = (Object.prototype.toString.apply(arr) === '[object Array]');

    for(var key in arr) {
    	var value = arr[key];
        if(typeof value == "object") { //Custom handling for arrays
            if(is_list) parts.push(array2json(value)); /* :RECURSION: */
            else parts[key] = array2json(value); /* :RECURSION: */
        } else {
            var str = "";
            if(!is_list) str = '"' + key + '":';

            //Custom handling for multiple data types
            if(typeof value == "number") str += value; //Numbers
            else if(value === false) str += 'false'; //The booleans
            else if(value === true) str += 'true';
            else str += '"' + value + '"'; //All other things
            // :TODO: Is there any more datatype we should be in the lookout for? (Functions?)

            parts.push(str);
        }
    }
    var json = parts.join(",");
    
    if(is_list) return '[' + json + ']';//Return numerical JSON
    return '{' + json + '}';//Return associative JSON
}

Пример:
var json_string = array2json(['e', {pluribus: 'unum'}]);//Returns '["e", {"pluribus": "unum"}]' 

var data = {
			"success":"Sweet",
			"failure":false,
			"empty_array":[],
			"numbers":[1,2,3],
			"info":{
				"name":"Binny",
				"site":"http:\/\/www.openjs.com\/"
			}
		};
var json = array2json(data); // Returns {"success":"Sweet","failure":false,"empty_array":[],"numbers":[1,2,3],"info":{"name":"Binny","site":"http:\/\/www.openjs.com\/"}}

Последний раз редактировалось Vulkan, 26.12.2010 в 14:59.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массив объектов или объект объектов vladlen Общие вопросы Javascript 19 30.10.2010 03:10
Сколько максимум символов может быть в 1 Cookie? FirstFrost Общие вопросы Javascript 8 18.07.2010 01:26
Как создать многомерный массив FRIE Общие вопросы Javascript 29 02.06.2010 19:14
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30
Загрузка картинок в массив StreG Общие вопросы Javascript 4 25.02.2010 01:36