尝试序列化 ASP.Net AJAX 数组对象时遇到“堆栈空间不足”错误。
这是简化代码的场景:
Default.aspx
MainScript.js
function getObject(){ return new Array(); } function function1(obj){ var s=Sys.Serialization.JavaScriptSerializer.serialize(obj); alert(s); } function function2(){ var obj=getObject(); var s=Sys.Serialization.JavaScriptSerializer.serialize(obj); alert(s); }
Content.aspx
ContentScript.js
function serializeObject(){ var obj=window.top.getObject(); window.top.function1(obj); // <– This works fine obj=new Array(); window.top.function1(obj); // <– this causes an Out of Stack Space error }
示例页面和 JavaScript 的代码在这里。
在此处发布 aspx 页面的代码存在问题。因此,请检查上面的链接以查看 aspx 页面的代码。
带有 IFrame 的网页 (default.aspx) 承载内容页 (content.aspx)。
单击“Serialize Object”按钮调用 JavaScript 函数 serializeObject()。序列化适用于在顶部窗口(框架外)中创建的 Array 对象。但是,如果在 IFrame 中创建数组对象,则序列化会出现堆栈空间不足的错误。我逐步浏览了 ASP.Net AJAX JS 文件,我发现,该过程进入了一个无限循环,试图找出数组对象的类型。无休止地调用 Number.IsInstanceOf 很快你就会得到一个堆栈外错误。
有任何想法吗?