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