如何序列化全日历源.将循环结构转换为 JSON 错误



我使用 http://arshaw.com/fullcalendar/的全日历jquery插件我在我的网站上使用淘汰 js。

我添加了事件数组,这是日历的来源。用户可以修改事件(数组)。

然后我想序列化事件数组,由 ajax 发送,但我不能,因为日历修改了我的数组,并在源数组中放置了一个循环。如何删除更改。为什么我的数组中有一个循环?我读过,可能这里面有一个DOM对象。

Chrome 发送请求错误:类型错误:将循环结构转换为 JSON

var a = [];
a.push({
  title: "Event2",
  start: "2013-09-05"
});
a.push({
  title: "Event2",
  start: "2013-09-15"
});
$("#calendar").fullCalendar({
  events: a,
  header: {
    left: "title",
    center: "",
    right: "today prev,next"
  },
  editable: false
});
console.log(JSON.stringify(a));

类型错误:将循环结构转换为 JSON

我该如何解决它?周期的原因是什么?

小提琴示例,您可以看到我的问题:

http://jsfiddle.net/erbsaag/XC3NH/1

插件正在修改您的数据。

如果您运行

console.log(a)

在主机之前.log您可以看到问题。一种解决方案是只返回您需要的字段,而不返回具有循环递归的字段。

例:

console.log(JSON.stringify(a.map(function(ai) { return {title: ai.title, start: ai.start}})));

请参考这个问题:JSON.stringify,避免类型错误:将循环结构转换为JSON

这是一个函数,将该答案改编为简单的可重用单行:

const jsonStringifySafe = (o) => {
    // Almost as seen in stackoverflow.com/questions/11616630
    var cache = [];
    let retv = JSON.stringify(o, (key, value) => {
        if (typeof value === 'object' && value !== null) {
            if (cache.indexOf(value) !== -1) {
                // Circular reference found, discard key
                return;
            }
            // Store value in our collection
            cache.push(value);
        }
        return value;
    });
    cache = null;
    return retv;
}

用法:

console.log(jsonStringifySafe(a));

例:http://jsfiddle.net/felyper/XC3NH/17/

相关内容

  • 没有找到相关文章

最新更新