我有一个想要序列化为字符串的 JavaScript 对象:
key {...} Object
mandant "00001" String
personalNummer 600235 Number
首先,我使用 JSON2,返回值为undefined
. 使用JSON3,我得到一个TypeError
并且行中的评论json3.js
说:
// Cyclic structures cannot be serialized by `JSON.stringify`.
问题似乎是由json3.js中的以下几行引起的:
// Manually invoke the callback for the `constructor` property due to
// cross-environment inconsistencies.
if (isConstructor || isProperty.call(object, (property = "constructor"))) {
callback(property);
}
但是应该没有循环,我显然无法找出到底发生了什么。
当我在调试时手动创建对象时,一切正常。
那么什么会引发错误呢?
编辑:
我成功地准备了一个产生错误的场景:
- 它只发生在具有兼容模式 IE7 和 IE8 的 IE9 中(Firefox 22 也可以)
- 如果打开一个引用打开器窗口中的数据的新窗口,就会发生这种情况
*JSON_Cycle.html*:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript" src="http://bestiejs.github.io/json3/lib/json3.js"></script>
<script>
var dataGlobal = {mandant: "Hallo Welt!", personalNummer: 123456};
$(function() {
window.open("JSON_Cycle_Popup.html", 'popup');
});
</script>
*JSON_Cycle_Popup.html*:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript" src="http://bestiejs.github.io/json3/lib/json3.js"></script>
<script>
var dataGlobal = null;
$(function() {
dataGlobal = window.opener.dataGlobal;
alert(JSON.stringify(dataGlobal));
});
</script>