【问题标题】:How to solve ' Uncaught TypeError: Converting circular structure to JSON '如何解决“未捕获的 TypeError:将循环结构转换为 JSON”
【发布时间】:2014-01-21 02:44:38
【问题描述】:

我正在执行一个网页,但在控制台上检查时显示以下错误。 '未捕获的类型错误:将循环结构转换为 JSON'

console.log(JSON.stringify(physicianInfo));
 Ext.Ajax.request(
   { async : true, 
     url : Global.URLPrefix + 'addPhysicianInformation', 
     method : 'GET', 
     params : { 
         physicianInfo : JSON.stringify(physicianInfo), callFrom : 'add' },
     success : function (request, resp) { 
         var physician1 = Ext.decode(request.responseText); console.log(physician1);

【问题讨论】:

  • 检查从 ajax 调用返回的数据并将其添加到您的问题中。
  • 您要字符串化的 physicianInfo 对象是什么?显然它包含了自己。记录它而不尝试对其进行字符串化,否则您已经收到错误。

标签: javascript extjs


【解决方案1】:

当对象之间有循环引用时会发生这种情况。

例如:

A references B
B references A

当您尝试序列化 A 时,它需要序列化 ​​B,但随后它需要再次序列化 A,并且无法在 JSON 中表示该循环。结果将是一个无限递归循环。

您需要识别并删除循环引用。请记住,链可能比上述更复杂:

A references B
B references C
C references A

有多少链接或它们如何存储都没有关系。如果您可以从一个对象转到另一个对象,然后通过任何路线返回第一个对象,那么它就是循环引用。

【讨论】:

  • 这是我的代码:console.log(JSON.stringify(physicianInfo)); Ext.Ajax.request({ async : true, url : Global.URLPrefix + 'addPhysicianInformation', 方法: 'GET', 参数: {医生信息: JSON.stringify(physicianInfo), callFrom : 'add' }, 成功: 函数 (请求,响应){ var医师1 = Ext.decode(request.responseText);console.log(physician1);
  • 可能在您的医生信息对象中(您尚未发布)。您应该将代码添加到问题中,而不是作为评论(这次是我为您完成的)。除此之外,如果您希望我为您编写代码,我的合同费率非常合理......
【解决方案2】:

JSON 不能包含循环引用(你知道什么是循环引用吗?)

在序列化之前,您需要重新格式化数据结构以避免它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2020-02-03
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多