我写了以下功能。我需要使用$COOKIE['cookieName']
格式访问Cookie。
var $COOKIE = (function(){
if(!document.cookie)
return {};
else{
var c = document.cookie.split(';');
var len = c.length;
var ret = {};
var temp ;
for( var i = 0 ; i < len ; ++i )
{
temp = c[i].split('=');
ret[temp[0]] = temp[1];
}
return ret;
}
})();
我设置了两个Cookie a1 = 2,a2 = 9. $COOKIE['a1']
给了我2,但$COOKIE['a2']
未定义。
为什么会这样?我的逻辑/代码有什么问题?
答案 0 :(得分:5)
问题是你被分裂了“;”但cookie中的值用“;”(分号+空格)分隔。因此,您的第二个值为" a2": 9
要修复它,只需在分隔符中添加一个空格,或者使用此代码段以实现更加以数据为中心的方法;)
var $COOKIE = (document.cookie || '').split(/;\s*/).reduce(function(re, c) {
var tmp = c.match(/([^=]+)=(.*)/);
if (tmp) re[tmp[1]] = unescape(tmp[2]);
return re;
}, {});
答案 1 :(得分:1)
试试这个
function getCookie(c_name) {
var i, x, y, ARRcookies = document.cookie.split(";");
for (i = 0; i < ARRcookies.length; i += 1) {
x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
x = x.replace(/^\s+|\s+$/g, "");
if (x === c_name) {
return (unescape(y));
}
}
}
答案 2 :(得分:1)
你有
var len = a.length;
应该是
var len = c.length;
如果你想循环遍历cookie数组。 (注意'C'而不是'A')。这就是为什么你只得到第一个,因为它只循环一次。不是数组的实际长度