Czy można utworzyć plik cookie za pomocą tablic?Utwórz tablicę w pliku cookie za pomocą javascript
Chciałbym przechowywać a[0]='peter'
, a['1']='esther'
, a['2']='john'
w ciasteczku w JavaScript.
Czy można utworzyć plik cookie za pomocą tablic?Utwórz tablicę w pliku cookie za pomocą javascript
Chciałbym przechowywać a[0]='peter'
, a['1']='esther'
, a['2']='john'
w ciasteczku w JavaScript.
Pliki cookie mogą zawierać tylko ciągi. Jeśli chcesz zasymulować tablicę, musisz ją przekształcić do postaci szeregowej i deserializować.
Można to zrobić z biblioteką JSON.
Po prostu potrzebuję przechowywać tablicę ciągów. Czy jest to możliwe dzięki prostszej metodzie? – limfreak
To jest prosta metoda. Są prostsze metody, ale są tylko nieco prostsze i znacznie mniej niezawodne. – Quentin
Zdecydowanie używaj JSON. Możesz przechowywać "['foo', 'bar']" i sprawdzać później, ale może to być katastrofa pod względem wydajności i stabilności. –
Tworzenie tablicy w pliku cookie przy użyciu jquery?
var list = new cookieList("test"); $(img).one('click', function(i){ while($('.selected').length < 3) {
$(this).parent()
.addClass("selected")
.append(setup.config.overlay);
//$.cookie(setup.config.COOKIE_NAME, d, setup.config.OPTS);
var index = $(this).parent().index();
// suppose this array go into cookies.. but failed
list.add(index);
var count = 'You have selected : <span>' + $('.selected').length + '</span> deals';
if($('.total').length){
$('.total').html(count);
}
} });
zgadzam się z innych uwag - nie powinno się tego robić i należy używać JSON. Jednak, aby odpowiedzieć na twoje pytanie, możesz zhakować to, przechowując tablicę jako łańcuch rozdzielany przecinkami. Powiedzmy, że chcesz zapisać następującą tablicę JavaScript w pliku cookie:
var a = ['peter','esther','john'];
można zdefiniować ciąg ciasteczek, następnie iteracyjne nad tablicy:
// Create a timestamp in the future for the cookie so it is valid
var nowPreserve = new Date();
var oneYear = 365*24*60*60*1000; // one year in milliseconds
var thenPreserve = nowPreserve.getTime() + oneYear;
nowPreserve.setTime(thenPreserve);
var expireTime = nowPreserve.toUTCString();
// Define the cookie id and default string
var cookieId = 'arrayCookie';
var cookieStr = '';
// Loop over the array
for(var i=0;i<a.length;i++) {
cookieStr += a[i]+',';
}
// Remove the last comma from the final string
cookieStr = cookieStr.substr(0,cookieStr.length-1);
// Now add the cookie
document.cookie = cookieId+'='+cookieStr+';expires='+expireTime+';domain='+document.domain;
W tym przykładzie, należy uzyskać następujący plik cookie przechowywane (jeżeli domena jest www.example.com):
arrayCookie=peter,ester,john;expires=1365094617464;domain=www.example.com
Wiem, że jest stary, ale mógłbyś właśnie zrobić var a = ['peter', 'esther', 'john']. Join(); A następnie usuń pętlę i substr. – cazgp
yes ... @ cazgp ....ale dobrze, aby usunąć ostatnie "," w powyższym –
Jak można przeczytać w tym topic:
Łączymy wtyczkę jQuery.cookie i JSON i rozwiązujemy problem.
Kiedy chcesz zapisać tablicę, należy utworzyć tablicę w JS i używać JSON.stringify
aby przekształcić go w ciąg i przechowywane z $.cookie('name', 'array_string')
var myAry = [1, 2, 3];
$.cookie('name', JSON.stringify(myAry));
Gdy chcesz sprowadzaniu tablicę wewnątrz cookie, ty użyj wartości $.cookie('name')
, aby pobrać wartość cookie i użyj JSON.parse
, aby pobrać tablicę z ciągu znaków.
var storedAry = JSON.parse($.cookie('name'));
//storedAry -> [1, 2, 3]
dodać poniższy kod Script (patrz poniższy kod) do pliku JavaScript o nazwie CookieMonster.js
.
To owinięcie wokół bieżącego urywek z http://www.quirksmode.org/js/cookies.html
Współpracuje z tablic i łańcuchów, to automagicznie uciec macierzy/przecinki STRING ,
i średniki ;
(które nie są obsługiwane w oryginalnych fragmentów).
Mam wymienione proste użycie i dodatkowe wykorzystanie, które w nim wbudowałem.
wykorzystania:
//set cookie with array, expires in 30 days
var newarray = ['s1', 's2', 's3', 's4', 's5', 's6', 's7'];
cookiemonster.set('series', newarray, 30);
var seriesarray = cookiemonster.get('series'); //returns array with the above numbers
//set cookie with string, expires in 30 days
cookiemonster.set('sample', 'sample, string;.', 30);
var messagestring = cookiemonster.get('sample'); //returns string with 'sample, string;.'
Bonusy:
//It also conveniently contains splice and append (works for string or array (single string add only)).
//append string
cookiemonster.append('sample', ' add this', 30); //sample cookie now reads 'sample, string;. add this'
//append array
cookiemonster.append('series', 's8', 30); //returns array with values ['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8']
//splice
cookiemonster.splice('series', 1, 2, 30); //returns array with values ['s1', 's4', 's5', 's6', 's7', 's8']
CookieMonster.js:
var cookiemonster = new Object();
cookiemonster.append = function (cookieName, item, expDays) {
item = cm_clean(item);
var cookievalue = cookiemonster.get(cookieName);
if (cookievalue instanceof Array) {
cookievalue[cookievalue.length] = item;
cm_createCookie(cookieName, cm_arrayAsString(cookievalue), expDays);
} else {
cm_createCookie(cookieName, cookievalue + item, expDays);
}
};
cookiemonster.splice = function (cookieName, index, numberToRemove, expDays) {
var cookievalue = cookiemonster.get(cookieName);
if (cookievalue instanceof Array) {
cookievalue.splice(index, numberToRemove);
cm_createCookie(cookieName, cm_arrayAsString(cookievalue), expDays);
}
};
cookiemonster.get = function (cookieName) {
var cstring = cm_readCookie(cookieName);
if (cstring.indexOf('<#&type=ArrayVals>') != -1) {
var carray = cstring.split(',');
for (var i = 0; i < carray.length; i++) {
carray[i] = cm_dirty(carray[i]);
}
if (carray[0] == '<#&type=ArrayVals>') {
carray.splice(0, 1);
}
return carray;
} else {
return cm_dirty(cstring);
}
};
cookiemonster.set = function (cookieName, value, expDays) {
if (value instanceof Array) {
cm_createCookie(cookieName, cm_arrayAsString(value), expDays);
}
else { cm_createCookie(cookieName, cm_clean(value), expDays); }
};
cookiemonster.eraseCookie = function (name) {
cm_createCookie(name, "", -1);
};
function cm_replaceAll(str, find, replace) {
return str.replace(new RegExp(find, 'g'), replace);
};
function cm_clean(ret) {
ret = cm_replaceAll(ret.toString(), ',', ',');
ret = cm_replaceAll(ret.toString(), ';', ';');
return ret;
};
function cm_dirty(ret) {
ret = cm_replaceAll(ret, ',', ',');
ret = cm_replaceAll(ret, ';', ';');
return ret;
};
function cm_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 + "=" + value + expires + "; path=/";
};
function cm_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 c.substring(nameEQ.length, c.length);
}
return null;
};
function cm_arrayAsString(array) {
var ret = "<#&type=ArrayVals>"; //escapes, tells that string is array
for (var i = 0; i < array.length; i++) {
ret = ret + "," + cm_clean(array[i]);
}
return ret;
};
Na tym przykładzie można to zrobić dość łatwo:
ciasteczek:
///W3Schools Cookie Code:
function setCookie(cname,cvalue,exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays*24*60*60*1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";";
}
function getCookie(cname) {
var name = cname + "=";
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);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
///My Own Code:
for(a=0;a<b.length;a++){
setCookie(b[a],b[a],periodoftime);
}
Odzyskaj Array:
for(a=0;a<b.length;a++){
b[a] = getCookie(b[a])
}
Dla każdej tablicy z innych typów wartości oprócz strun:
ciasteczek:
///Replace MyCode above With:
if(typeof b[a] === 'string'){
setCookie(b[a],b[a],periodoftime);
}else{
setCookie(b[a].toString,b[a],periodoftime);
}
Odzyskaj tablicy:
for(a=0;a<b.length;a++){
if(typeof b[a] === 'string'){
b[a] = getCookie(b[a])
}else{
b[a] = getCookie(b[a].toString)
}
}
Jedyną wadą jest to, że identyczne wartości nie mogą być odzyskane.
Brak potrzebnego JQuery, oddzielania przecinków lub JSON.
Utworzyłem ten prosty sposób na pobieranie plików cookie. To da błąd jeśli wykonać tutaj, ale jest funkcjonalny
var arrayOfCookies = [];
function parseCookieToArray()
{
var cookies = document.cookie;
var arrayCookies = cookies.split(';');
arrayCookies.map(function(originalValue){
var name = originalValue.split('=')[0];
var value = originalValue.split('=')[1];
arrayOfCookies[name] = value;
});
}
console.log(arrayOfCookies); //in my case get out: [language: 'en_US', country: 'brazil']
parseCookieToArray();
New Moje nowe obj do create
get
ciasteczka
cookie = {
set: function(name, value) {
document.cookie = name+"="+value;
},
get: function(name) {
cookies = document.cookie;
r = cookies.split(';').reduce(function(acc, item){
let c = item.split('='); //'nome=Marcelindo' transform in Array[0] = 'nome', Array[1] = 'Marcelindo'
c[0] = c[0].replace(' ', ''); //remove white space from key cookie
acc[c[0]] = c[1]; //acc == accumulator, he accomulates all data, on ends, return to r variable
return acc; //here do not return to r variable, here return to accumulator
},[]);
}
};
cookie.set('nome', 'Marcelindo');
cookie.get('nome');
I wybaczcie za moje Beginner Angielski .
Biorąc pod uwagę charakter tablic, gotować (ograniczony rozmiar) jest ostatnim miejscem, w którym chciałbym zapisać jedną/ostatnią metodę przechowywania, której próbowałem użyć. – symcbean