跑进一个"出的堆空间"错误地试图将ASP.Net AJAX列的对象。

这是场景与简化的代码:

  1. Default.aspx

  2. 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);
    }
    
  3. Content.aspx

  4. 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,它不处理一个空阵正常。

你有没有试过一个项目添加的一个序列化的类型阵列中的代码?如果是这样,会出现什么情况?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top