Плагин Wordpress Favorites - чтение массива сообщений из cookie
Мне нужно прочитать cookie, сгенерированный плагином "Wordpress Favorites" (отличная основа кода), и получить идентификаторы сообщений из массива cookie для использования в интерфейсе. Это сделано для того, чтобы избежать внешнего кэширования у нашего хостинг-провайдера WP Engine.
Файл cookie называется "simpleflected", и данные cookie выглядят так, если их просматривать в консоли Firebug:
Под "значением":
[{"site_id":1,"posts":[17411,22578],"groups":[{"group_id":1,"site_id":1,"group_name":"Default List","posts":[17411,22578]}]}]
и в разделе "Необработанные данные":
%5B%7B%22site_id%22%3A1%2C%22posts%22%3A%5B17411%2C22578%5D%2C%22groups%22%3A%5B%7B%22group_id%22%3A1%2C%22site_id%22%3A1%2C%22group_name%22%3A%22Default+List%22%2C%22posts%22%3A%5B17411%2C22578%5D%7D%5D%7D%5D
Мне нужно получить значения записей в виде массива для работы с аналогичным массивом (17411,22578). Мы можем вернуть все содержимое куки и определить, существует ли он, но вытащить только идентификаторы оказывается сложно. Любые предложения о том, как разобрать эту строку, будет принята с благодарностью. Вот с чем мы сейчас работаем...
// Read Cookie For Favorites Functionality - simplefavourites
function 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;
}
// Extract post ID's from cookie string
function getvaluefromcookiestring(cookiecontents){
cookiecontents = decodeURI(cookiecontents); // this works fine and
var val = JSON.parse(cookiecontents),
v = val[0]; // the contents of the cookie is a one-node array
return v.posts;
}
var cookiecontents = readCookie('simplefavorites');
cookiecontents = getvaluefromcookiestring(cookiecontents);
alert(cookiecontents);
Мы получаем "SyntaxError: JSON.parse: ожидаемый": "после имени свойства в объекте в строке 1 столбца 12 данных JSON"
------ ПРОБЛЕМА РЕШЕНА ------ с помощью @Spartacus и @Louys Patrice Bessette. См. Связанный вопрос здесь о правильном получении значений из файла cookie: Javascript - получение данных из файла cookie как "значение", а не "необработанные данные"
// Read cookie for favorites functionality - simplefavourites
function readCookie(name) {
var c = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
return c ? c[2] : null;
}
// Extract post ID's from cookie string
function getvaluefromcookiestring(cookiecontents){
cookiecontents = decodeURI(cookiecontents.replace(/%3A/g, ":").replace(/%2C/g, ",").replace(/\+/g, "%20"));
var val = JSON.parse(cookiecontents),
v = val[0];
return v.posts;
}
var cookiecontents = readCookie('simplefavorites');
cookiecontents = getvaluefromcookiestring(cookiecontents);
alert(cookiecontents);
Спасибо за помощь всем накопителям!
2 ответа
Измените функцию получения cookie на эту:
function readCookie(name) {
var c = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
return c ? c[2] : null;
}
Тогда используйте JSON.parse
превратить значение в объект для манипуляции. Вы можете взять это так:
function getpostsfromfavouritecookie(cookiecontents){
var val = JSON.parse(cookiecontents),
v = val[0]; // the contents of the cookie is a one-node array
return v.posts;
}
var cookiecontents = readCookie('simplefavorites');
var posts = getpostsfromfavouritecookie(cookiecontents);
alert(posts);
Вроде бы действительный JSON. Используйте JSON.parse ().
var cookieString = '[{"site_id":1,"posts":[17411,22578],"groups":[{"group_id":1,"site_id":1,"group_name":"Default List","posts":[17411,22578]}]}]';
var obj = JSON.parse(cookieString);
// now access object properties
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse