Wordpress 收藏夹插件 - 从 cookie 中读取一系列帖子
Wordpress Favourites Plugin - Read array of posts from cookie
我需要读取由 "Wordpress Favourites" 插件(伟大的代码基础)生成的 cookie,并从 cookie 数组中获取 posts ID 以用于界面。这是为了避免 front-end 在我们的托管服务提供商 WP Engine 中缓存。
cookie 被调用 "simplefavorites" 在 Firebug 控制台中查看时,cookie 数据如下所示:
在"value"之下:
[{"site_id":1,"posts":[17411,22578],"groups":[{"group_id":1,"site_id":1,"group_name":"Default List","posts":[17411,22578]}]}]
及"Raw Data"以下:
%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
我需要将 post 值作为数组来处理,以便与数组 (17411,22578) 一起使用。我们可以 return 整个 cookie 内容,并检测它是否存在,但事实证明仅提取 ID 非常棘手。非常感谢有关如何解析此字符串的任何建议。这是我们现在正在处理的内容....
// 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: expected ':' after property name in object at line 1 column 12 of the JSON data"
------问题已解决------
在@Spartacus 和@Louys Patrice Bessette 的帮助下。请在此处查看有关正确从 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);
感谢所有堆垛机的帮助!
似乎有效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
将您的 cookie-getter 函数更改为:
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);
我需要读取由 "Wordpress Favourites" 插件(伟大的代码基础)生成的 cookie,并从 cookie 数组中获取 posts ID 以用于界面。这是为了避免 front-end 在我们的托管服务提供商 WP Engine 中缓存。
cookie 被调用 "simplefavorites" 在 Firebug 控制台中查看时,cookie 数据如下所示:
在"value"之下:
[{"site_id":1,"posts":[17411,22578],"groups":[{"group_id":1,"site_id":1,"group_name":"Default List","posts":[17411,22578]}]}]
及"Raw Data"以下:
%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
我需要将 post 值作为数组来处理,以便与数组 (17411,22578) 一起使用。我们可以 return 整个 cookie 内容,并检测它是否存在,但事实证明仅提取 ID 非常棘手。非常感谢有关如何解析此字符串的任何建议。这是我们现在正在处理的内容....
// 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: expected ':' after property name in object at line 1 column 12 of the JSON data"
------问题已解决------
在@Spartacus 和@Louys Patrice Bessette 的帮助下。请在此处查看有关正确从 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);
感谢所有堆垛机的帮助!
似乎有效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
将您的 cookie-getter 函数更改为:
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);