Массив в 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')]);
});
|
Лучше хранить в куках массив в JSON-виде (В куках, напоминаю, все хранится в строковом представлении). Соответственно, при извлечении из кук нужно конвертировать строковое представление массива в нормальный массив (и работать с ним как с обычным массивом), а при записи конвертировать в строковое представление.
|
B@rmaley.e><e, Ок!
А чем кодировать в JSON ? |
В современных браузерах есть нативные средства для работы с JSON. Для старых есть реализация на JS. См. тут.
|
Чтобы превратить строковое представление в массив, нужно воспользоваться функцией 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\/"}}
|
| Часовой пояс GMT +3, время: 00:00. |