Chrome和IE中的JSON.parse语法错误

Chrome和IE中的JSON.parse语法错误,json,Json,我试图使用jquerycookie插件来有效地“记住”由jscrollpane插件创建的滚动窗格的位置 基本上,我希望jscrollpane查看cookie并根据保存的值设置初始水平位置。然后在位置改变时,更新cookie 我开始使用w/数组,但现在使用对象。关键是div#id,我对它进行了编码,以反映它显示的帖子类别。。。这样它将是独一无二的。键的值是jscrollpane踢出的水平位置 我认为最好将我想存储为cookie的对象转换为JSON字符串,但当我尝试使用JSON.parse(cook

我试图使用jquerycookie插件来有效地“记住”由jscrollpane插件创建的滚动窗格的位置

基本上,我希望jscrollpane查看cookie并根据保存的值设置初始水平位置。然后在位置改变时,更新cookie

我开始使用w/数组,但现在使用对象。关键是div#id,我对它进行了编码,以反映它显示的帖子类别。。。这样它将是独一无二的。键的值是jscrollpane踢出的水平位置

我认为最好将我想存储为cookie的对象转换为JSON字符串,但当我尝试使用JSON.parse(cookie)将其转换回对象时,IE和Chrome中会出现语法错误

jQuery(function($){

    //load the cookie 
    var cookie = $.cookie('xpos');
    //Load the saved values or a new array if null.

    var xpositions = cookie ? JSON.parse(cookie) : new Object();

    console.log(xpositions);


    // Loop over each scroll-pane
    $( ".scroll-pane" ).each( function( index ){
        $(this).jScrollPane({showArrows: true, autoReinitialise: true}); //initialize jscrollpane
        var api = $(this).data('jsp'); //access jscrollpane api 

        //var catID = parseInt($(this).attr('id').match(/[0-9]+/)); //grab cat_ID which we've stored as part of the div id#
        var catID = $(this).attr('id');

        if( typeof xpositions[catID] != "undefined" ) {
            console.log(catID +" = element exists in array and position = " + xpositions[catID] );
            api.scrollToX(xpositions[catID]); //set scroll-pane position to position saved in cookie
        } 

        $(this).bind('jsp-scroll-x',function(event, scrollPositionX){   //change cookie on scroll event     
            xpositions[catID] = scrollPositionX;
            console.log(catID + " = " + scrollPositionX);

            //set the cookie with array of x-positions, expires after 7 days
            $.cookie('xpos', JSON.stringify(xpositions), { expires: 7, path: '/' });

            }
        );

    }); //end each


});
您可以在此处查看实时版本:

编辑:我还应该提到,这在我的本地XAMPP服务器上似乎可以工作,但仍然无法正常工作。谢谢

编辑:为什么这样的帖子似乎给我指明了一个更好的方向?此后,我发现jookie插件可以在cookie插件与我的对象一起失败的情况下继续工作

我的新代码是:

// initialise a cookie that lives for 1 week
$.Jookie.Initialise("xposition", 60*24*7);

// Loop over each scroll-pane
$( ".scroll-pane" ).each( function( index ){
    $(this).jScrollPane({showArrows: true, autoReinitialise: true}); //initialize jscrollpane
    var api = $(this).data('jsp'); //access jscrollpane api 

    var catID = $(this).attr('id');

    var xpos = $.Jookie.Get("xposition", catID);
    if(xpos) {
        api.scrollToX(xpos); //set scroll-pane position to position saved in cookie
    }


    $(this).bind('jsp-scroll-x',function(event, scrollPositionX){   //change cookie on scroll event     
        // set a value to the cookie
        $.Jookie.Set("xposition", catID, scrollPositionX);
        }
    );

}); //end each

xpos=%7B%22cat-45%22%3A0%2C%22cat-48%22%3Anull%7D
是我访问您的页面时设置为我的cookie的内容;JSON解析器将无法解析它。您希望它是xpos={..object stuff here..}


本质上,如果您不能手动将字符串复制到变量中,解析器将遇到问题。

您是否尝试过评估

if (cookie !== null) {
    var jsoncookie = eval("("+cookie +")"); // $.parseJSON(cookie );
}

那么这是否意味着JSON.stringify(xpositions)无法正确地将我的对象转换为JSON字符串呢?更可能是$.cookie试图转义的东西。我可以手动将cookie设置为
document.cookie=“someId={\'four\':\'five\'}”
@Robert-非常感谢您的帮助。在这里发布几分钟后(我整天都在做这件事),我找到了$.jookie插件,它正是我想要实现的。我已经编辑了我的问题来显示我的新代码。你还有问题吗?没有,那个插件在几分钟内解决了我花了几个小时的工作。唉。再次感谢你的帮助!不,我可能没试过。因为这个问题太老了,我不知道我在做什么,所以我可能不会测试它。然而,我希望它能帮助其他人。