Анализ JSON, возвращающий неопределенное значение - PullRequest
0 голосов
/ 26 декабря 2018

Я работаю над системой чтения истории.когда пользователь посещает какое-либо сообщение, оно будет сохранено в localalstorage с помощью json и отображено на определенном элементе, чтобы они могли отслеживать свое последнее чтение.

ViewHistory = function() {
    this.config = {
        storageKey: 'viewHistory',
        primaryKey: 'id'
    };
    this.cache = {
        localStorage:  null,
        userData:  null,
        attr:  null
    };
};

ViewHistory.prototype = {
    init: function(config) {
        this.config = config || this.config;
        var _self = this;
        // Define localStorage
        if (!window.localStorage && (this.cache.userData = document.body) && this.cache.userData.addBehavior && this.cache.userData.addBehavior('#default#userdata')) {
            this.cache.userData.load((this.cache.attr = 'localStorage'));
            this.cache.localStorage = {
                'getItem': function(key) {
                    return _self.cache.userData.getAttribute(key);
                },
                'setItem': function(key, value) {
                    _self.cache.userData.setAttribute(key, value);
                    _self.cache.userData.save(_self.cache.attr);
                }
            };
        } else {
            this.cache.localStorage = window.localStorage;
        }
    },

    addHistory: function(item) {
        var items = this.getHistories();
        for(var i=0, len=items.length; i<len; i++) {
            if(item[this.config.primaryKey] && items[i][this.config.primaryKey] && item[this.config.primaryKey] === items[i][this.config.primaryKey]) {
                items.splice(i, 1);
                break;
            }
        }
        items.push(item);
        var json = JSON.stringify(items);
        this.cache.localStorage.setItem(this.config.storageKey, json);
    },

    getHistories: function() {
        var history = this.cache.localStorage.getItem(this.config.storageKey);
        if(history) {
            return JSON.parse(history);
        }
        return [];
    }
};

if(typeof localStorage !== 'undefined' && typeof JSON !== 'undefined') {
    var viewHistory = new ViewHistory();
    viewHistory.init({
        storageKey: 'viewHistory',
        primaryKey: 'id'
    });
}

//Output

var wrap = document.getElementById('viewed_history');

if(viewHistory && wrap) {
    var histories = viewHistory.getHistories();
    var list = document.createElement('ul')
    if(histories && histories.length > 0) {
        for(var i=histories.length-1; i>=0; i--) {
            var history = histories[i];
            var item = document.createElement('li');
            var link = document.createElement('a');
            link.href = history.url;
            link.innerHTML = history.title;
            item.appendChild(link);
            list.appendChild(item);
        }
        wrap.appendChild(list);
    }
}

как я могу получить данные и сохранить их вlocalstorage:

<?php global $post;
$kategori = get_the_category( $post->ID );?>
<script type='text/javascript'>
if(viewHistory) {
    var book = {
        "id": <?php echo $kategori[0]->term_id;?>,
        "title": '<?php echo $kategori[0]->name; ?>',
        "url": '<?php echo get_the_permalink(); ?>',
    viewHistory.addHistory(book);
}
</script>

Json.stringify отлично работает в качестве примера:

[
    {
        "id": 2,
        "title": "Book A Chapter 96",
        "url": "https:// Post URL /"
    },
    {
        "id": 39,
        "title": "Book B Chapter 153",
        "url": "https:// Post URL /"
    }
]

Однако результат продолжает получать неопределенное значение. В чем проблема?и как это исправить?

1 Ответ

0 голосов
/ 26 декабря 2018

Пожалуйста, будьте осторожны при установке объекта JSON. Ключ должен быть в кавычках , а значение зависит от того, является ли оно логическим, целым или строковым (сделать кавычку).

Я думаю, в вашем JSON вы не поддерживаете формат json.посмотрите ваш пример son.stringify ().

 var config = '{"storageKey": true,"primaryKey": "id"}';

и получите доступ к простому примеру:

var a =JSON.parse(config)
        console.log(a.storageKey);

Или просто верните историю.

 getHistories: function() {
    var history = this.cache.localStorage.getItem(this.config.storageKey);
    if(history) {
        return history;
    }
    return [];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...