Синтаксические ошибки JSON.parse в Chrome и IE - PullRequest
0 голосов
/ 22 апреля 2011

Я пытаюсь использовать плагин cookie jquery, чтобы эффективно «запомнить» положение полосы прокрутки, созданной плагином jscrollpane.

В основном я хочу, чтобы jscrollpane посмотрел на cookie и установил начальную позицию по горизонтали на основе сохраненного значения.а затем при изменении позиции обновите cookie.

Я начал с массивов, но теперь использую объекты.ключ - это 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


});

вы можете проверить живую версию здесь: http://www.testtrack.tv/

edit: я должен также упомянуть, что это работает на моем локальном XAMPPсервер, но все равно не работает вживую.спасибо!

edit: почему публикация на SO, кажется, указывает мне лучшее направление?с тех пор я обнаружил, что плагин Jookie просто расправился с РАБОТОЙ, где плагин cookie потерпел неудачу с моим объектом.

http://joncom.be/code/jquery-jookie/

мой новый код:

// 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

Ответы [ 2 ]

1 голос
/ 18 февраля 2014

Вы пытались сделать eval?

if (cookie !== null) {
    var jsoncookie = eval("("+cookie +")"); // $.parseJSON(cookie );
}
1 голос
/ 22 апреля 2011

xpos=%7B%22cat-45%22%3A0%2C%22cat-48%22%3Anull%7D Это то, что вы установили в качестве моего cookie, когда я посетил вашу страницу; синтаксический анализатор JSON не сможет это проанализировать. Вы хотите, чтобы это было xpos = {.. объектные вещи здесь ..}.

По сути, если вы не можете скопировать строку в переменную вручную, у парсера возникнут проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...