6

私は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エラー:TypeError:循環構造をJSONnに変換しています

ただし、ブラウザで次の例外が発生します。

Uncaught TypeError:循環構造をJSONに変換しています

Javaスクリプトオブジェクトは次のとおりです。 ここに画像の説明を入力してください

MozillaブラウザでtoSource()を使用して以前のJSONオブジェクトを取得しました。それを修正する方法はありません!!

============================ UPDATE ===================== ===

実際、私は最初から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のアイデアはなぜそれが最初に合格し、2回目に失敗したのですか?

4

2 に答える 2

8

問題は、循環参照であるソースオブジェクトです。

ソースオブジェクトなしでオブジェクトのコピーを作成する必要があります。

それが私がFullCalendarで問題を解決した方法です。

于 2013-02-23T11:02:41.717 に答える
8

JSON で日付オブジェクトをエンコードすることはできません。

json.orgから:「値は、二重引用符で囲まれた文字列、数値、true、false、null、またはオブジェクトまたは配列にすることができます。これらの構造はネストできます。」

于 2012-05-08T19:22:53.250 に答える