5

我使用来自http://arshaw.com/fullcalendar/的 fullcalendar jquery 插件 ,我在我的网站上使用了淘汰赛 js。

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

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

Chrome sendrequest 错误:TypeError:将循环结构转换为 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));

TypeError:将循环结构转换为 JSON

我该如何解决?循环的原因是什么?

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

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

4

2 回答 2

1

该插件正在修改您的数据。

如果你跑

console.log(a)

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

例子:

console.log(JSON.stringify(a.map(function(ai) { return {title: ai.title, start: ai.start}})));
于 2018-11-01T12:03:45.560 回答
0

请参考这个问题: JSON.stringify, Avoid TypeError: Converting circular structure to 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/

于 2018-11-01T12:40:37.813 回答