ASP.Net 阿贾克斯JavaScript化的错误
-
09-06-2019 - |
题
跑进一个"出的堆空间"错误地试图将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页。
一个网页(默认。aspx)与框架在,主页的内容(内容。aspx)。
点击"Serialize对象"按钮的话JavaScript功能serializeObject().化工作的现列为对象的创造在顶窗口(外的框架)。但是,如果列目的是创建的框架,序列化炸弹一堆空间误差。我踩过ASP.Net 阿贾克斯JS文件和我的发现是,该过程进入无尽的循环试图找出的类型阵列的对象。无尽的呼叫的号码。IsInstanceOf很快你会得到一个推堆的错误。
任何想法?
解决方案
这个问题的发生,因为Sys.序列化。JavaScriptSerializer不能serialize对象从其他框架,但只有那些对象在化在当前的窗口(其中要求serialize()法)。唯一的解决方法哪些是已知的对我来说,这是使克隆的目的从其他框架之前叫serialize()方法。
例的克隆()methode你可以在这里找到(评论在俄罗斯):链接文本
其他提示
我转你的例的一套html静态的文件,并下载的独立 Microsoft阿贾克斯库3.5 来测试。它没有问题上的火狐3或即7,但是我没有注意到的第一警告框显示[](array)和第二{}(一对象)。
然后,我转你的新Array()代码:
var obj = [];
obj.push(1);
在这之后,我得到了[1]{"0",1}是警报箱。我不觉得错误是与JavaScriptSerializer,但是与传对象的框架。
我没有办法检测你代码的权利,但是它看起来像一个错误在JavaScriptSerializer.serialize给我。我的猜测是,它试图做某种类型的检查阵通过CLR,它不处理一个空阵正常。
你有没有试过一个项目添加的一个序列化的类型阵列中的代码?如果是这样,会出现什么情况?