Подтвердить что ты не робот

Преобразование круговой структуры в JSON - Любой способ найти, в каком поле он жалуется?

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

Я был над кодом десяток раз и не могу найти никаких круговых ссылок вообще. Есть ли способ заставить Chrome рассказать мне, что это заставляет за это мучительно бесполезное сообщение об ошибке?

4b9b3361

Ответ 1

Простите меня, если это слишком очевидно. На момент написания статьи я не знаю, что вы пробовали.

Вставить

console.log(the object); 

заменив "объект" на объект, который вы передаете на JSON.stringify()

вставьте эту строку перед вызовом JSON.stringify

и загляните в консольный журнал (управление сдвигом J) для объекта. В журнале консоли объект будет помечен символом " > ", который можно щелкнуть, чтобы развернуть его.

Он жалуется на объект, который имеет указатели на себя, как этот тип объекта:

A = [];
A[0] = A; 
JSON.stringify(A); // circular error

Ответ 2

Вы можете использовать dojox.json.ref для поиска круговых ссылок. Этот код печатает json-представление вашего objectWithCircularReferences:

require(["dojox/json/ref"], function(){
    console.log(dojox.json.ref.toJson(objectWithCircularReferences));
});

Любое появление подстроки "$ ref" в своем выводе на консоль поможет найти локальные ссылки. Вы можете альтернативно транслировать этот вывод json на глобальную переменную ZZZ, если хотите:

require(["dojox/json/ref"], function(){
    window.ZZZ = dojox.json.ref.toJson(objectWithCircularReferences);
});

И, конечно, вам нужно включить библиотеку dojo заранее. В html файле:

<script src="//yandex.st/dojo/1.9.1/dojo/dojo.js"></script>

В консоли firebug:

include("//yandex.st/dojo/1.9.1/dojo/dojo.js")

В консоли Chrome:

SCRIPT = document.createElement('script');
SCRIPT.src = '//yandex.st/dojo/1.9.1/dojo/dojo.js';
document.body.appendChild(SCRIPT);