webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg

Как дебажить Converting circular structure to JSON?

В определенный момент поймал ошибку:
ошибка текст

default_modal.js:135 Uncaught TypeError: Converting circular structure to JSON
    at JSON.stringify (<anonymous>)
    at addToCart (default_modal.js:135)
    at HTMLAnchorElement.<anonymous> (default_modal.js:75)
    at HTMLAnchorElement.dispatch (jquery.js:4737)
    at HTMLAnchorElement.elemData.handle (jquery.js:4549)
addToCart	@	default_modal.js:135
(anonymous)	@	default_modal.js:75
dispatch	@	jquery.js:4737
elemData.handle	@	jquery.js:4549


при этом в строке default_modal.js:135
localStorage.setItem('order_items',JSON.stringify(cart));


вот код функции:
function addToCart(data) {
        var cart = getCartObject(),
            el_name = getCartElementName(data);
        if(typeof cart[el_name] != 'undefined'){
            cart[el_name].count++;
        }else{
            cart[el_name] = data;
            cart[el_name].count = 1;
        }
        localStorage.setItem('order_items',JSON.stringify(cart));
        refreshCart();
    return true;
}

function getCartObject(){
    var cart = {};
    if (isLocalStorage()) {
        if (typeof localStorage.order_items !== 'undefined') {
            cart = JSON.parse(localStorage.order_items);
        }else{
            localStorage.order_items = JSON.stringify(cart);
        }
    }
    return cart;
}


При чем все работало, пока был localStorage.setItem, очистил, теперь он должен создаться, он создается в том же виде, как и был но выкидывает ошибку. Час уже сижу не понимаю где эта тварь цикличность нашла.
  • Вопрос задан
  • 20246 просмотров
Решения вопроса 1
larisamoroz
@larisamoroz
Курю маны, втыкаю в код, ваяю, починяю.
Что-то внутри объекта data, передаваемого в addToCart, содержит ссылку на cart (или на самого себя), образуя т.н. циклическую зависимость, типа:
var data = {
  1: "foo",
…
  d: data
}

Проверьте, что у вас в cart перед тем, как делаете JSON.stringify(cart)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы