JavaScript 异常:未捕获的类型错误:将循环结构转换为 JSON
Posted
技术标签:
【中文标题】JavaScript 异常:未捕获的类型错误:将循环结构转换为 JSON【英文标题】:JavaScript exception :Uncaught TypeError: Converting circular structure to JSON 【发布时间】:2012-05-17 07:27:07 【问题描述】:我有 JSON 对象:
[#1=id:"2012-05-04", title:"Scheduled", start:(new Date(1336096800000)), source:events:[#1#], className:[], _id:"2012-05-04", _start:(new Date(1336089600000)), end:null, _end:null, allDay:true, className:[]]
我尝试将其字符串化:
var test = JSON.stringify(resourceVacation, censor(resourceVacation));
function censor(censor)
return (function()
var i = 0;
return function(key, value)
if (i !== 0 && typeof(censor) === 'object' && typeof(value) == 'object' && censor == value)
return '[Circular]';
++i; // so we know we aren't using the original object anymore
return value;
)(censor);
我使用这里提到的审查员:Chrome sendrequest error: TypeError: Converting circular structure to JSONn
但是我在浏览器上得到以下异常:
未捕获的 TypeError:将循环结构转换为 JSON
这是 Java Script 对象:
我在 Mozilla 浏览器中使用 toSource() 获得了之前的 JSON 对象。 知道如何解决它!
=============================更新================== ======
其实我需要从一开始就和大家分享一下scnerio: 1 - 最初:我有一个表单,最后我构建了 java 脚本对象:
#1=[id:"2012-05-03", title:"Scheduled", start:(new Date(1336010400000)), source:events:#1#, className:[], _id:"2012-05-03", _start:(new Date(1336003200000)), end:null, _end:null, allDay:true, className:[]]
此对象通常是字符串化的...注意,它是典型的稍后会触发异常的对象。
2- 然后我从这个数组中删除对象:
function deleteVacation(day)
for (var index = 0; index < resourceVacation.length; index++)
if (resourceVacation[index].id == day)
resourceVacation.splice(index,1);
3-当我在删除单个对象后尝试对该数组进行字符串化时,我得到了提到的异常。 所以.. anu 想为什么它第一次通过而第二次失败!!
【问题讨论】:
验证您的 JSON。好像无效:jsonlint.org 实际上我已经拥有的是对象数组,我使用 obj.toSource() 来获取该 json 。 我已经更新了我的帖子。如果您有任何问题,请反馈给我。问题出在源头——object which is a circular reference。
您应该创建一个没有源对象的对象副本。
这就是我在 FullCalendar 中解决问题的方法。
【讨论】:
有没有人可以解释我如何做到这一点?【参考方案2】:您不能对日期对象进行 JSON 编码。
来自json.org:“值可以是双引号中的字符串、数字、真假或空值、对象或数组。这些结构可以嵌套。”
【讨论】:
我不关注你了,你能详细说明一下吗! @Echo:这很简单。 JSON 中的值的类型受到限制。答案说日期不是这些类型之一。如果您想要一个日期,一种简单的解决方法是将日期转换为字符串或数字。根据您的需要,其中一个可能会更好。 其实,我认为这可能只是问题的一部分。该错误(以及您链接到的其他答案)是说您正在尝试对具有循环引用的对象进行编码。我会尝试删除start
和 _start
值,如果这不能解决问题,请删除数组或对象属性。如果这样可以解决问题,请检查以确保您删除的任何数组或对象都没有引用“链中更高”的任何内容。
嗯,我不太确定。不过,将函数命名为 delete
有点吓人。如果您使用的是 Chrome,我会尝试“暂停未捕获的异常”功能(单击 js 调试工具中的停止符号/暂停图标,直到它变为紫色)。当错误被抛出时,它应该会中断并让您有机会查看程序的当前状态。
坦率地说,这是我刚刚知道的一个新功能。感谢与我分享它。关于我的程序在异常之前的状态,正如我所提到的。是什么让我发疯,我可以将对象添加到此数组并正常字符串化。当我从数组中删除对象时,问题才会出现。如果您有任何假设,请告诉我。以上是关于JavaScript 异常:未捕获的类型错误:将循环结构转换为 JSON的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的类型错误:无法读取 jquery 滑块中未定义的属性“addClass”
以 NSException (lldb) 类型的未捕获异常终止
jQuery.browser:Javascript 未捕获的类型错误
Bourbon Refills Navigation JavaScript 错误:未捕获类型错误:未定义不是函数