2012-02-13 3 views
2

Возможный дубликат:
Read cookie in javascriptДоступ печенье в JavaScript

я написал следующую функцию. Мне нужно получить доступ к файлам cookie в формате $COOKIE['cookieName'].

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; 
    } 
})(); 

Я поставил два печенья a1 = 2, a2 ​​= 9. $COOKIE['a1'] дает мне 2, но $COOKIE['a2'] не определен.

Почему это происходит? В чем проблема в моей логике/коде?

+0

Где ваша функция? –

+0

Я добавил его сейчас. –

+0

Вам, кажется, не хватает '}' –

ответ

4

Проблема в том, что вы раскалываетесь на ";" но значения в 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; 
}, {}); 
+0

Спасибо ... Это проблема –

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)); 
     } 
    } 
} 
+1

ОП задает вопрос о том, как создать карту всех файлов cookie, к которой можно получить доступ с помощью скобок. Это прекрасное обходное решение, но не ответ на вопрос. –

1

у вас есть

var len = a.length; 

должно быть

var len = c.length; 

, если вы хотите, чтобы цикл через массив печенья. (Обратите внимание на «C» вместо «A»). Вот почему вы получаете только первый, потому что он циклически работает только один раз. Не действительная длина массива

+0

Это была ошибка типографии –

Смежные вопросы