【问题标题】:ASP.Net AJAX JavaScript Serialization ErrorASP.Net AJAX JavaScript 序列化错误
【发布时间】:2010-09-08 14:03:43
【问题描述】:

在尝试序列化 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 的代码是 here

在此处发布 aspx 页面的代码存在问题。所以请检查上面的链接以查看 aspx 页面的代码。

带有 IFrame 的网页 (default.aspx) 承载内容页面 (content.aspx)。

单击“序列化对象”按钮调用 JavaScript 函数 serializeObject()。序列化适用于在顶部窗口(框架外)中创建的 Array 对象。但是,如果在 IFrame 中创建数组对象,则序列化会出现堆栈空间不足的错误。我逐步浏览了 ASP.Net AJAX JS 文件,我发现,该过程进入了一个无限循环,试图找出数组对象的类型。对 Number.IsInstanceOf 的无休止调用,很快就会出现堆栈外错误。

有什么想法吗?

【问题讨论】:

    标签: asp.net javascript asp.net-ajax


    【解决方案1】:

    出现这个问题是因为 Sys.Serialization.JavaScriptSerializer 不能序列化来自其他框架的对象,而只能序列化那些在当前窗口中实例化的对象(调用 serialize() 方法)。我知道的唯一解决方法是在调用 serialize() 方法之前从其他帧克隆对象。

    您可以在此处找到 clone() 方法的示例(俄语中的 cmets): link text

    【讨论】:

      【解决方案2】:

      我将您的示例转换为一组静态 html 文件,并下载了独立的 Microsoft Ajax Library 3.5 以进行测试。它在 Firefox 3 或 IE 7 上都没有问题,但我确实注意到第一个警告框显示 [](一个数组)和第二个 {}(一个对象)。

      然后,我将您的新 Array() 代码转换为:

        var obj = [];
        obj.push(1);
      

      然后,我得到 [1] 和 {"0", 1} 是警报框。我不认为这个错误与 JavaScriptSerializer 有关,而是与跨帧传递对象有关。

      【讨论】:

        【解决方案3】:

        我现在无法测试您的代码,但对我来说它看起来像是 JavaScriptSerializer.serialize 中的一个错误。我的猜测是它试图通过 CLR 对数组进行某种类型检查,并且它不能正确处理空数组。

        您是否尝试在代码中将可序列化类型的项添加到数组中?如果是这样,会发生什么?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-23
          • 1970-01-01
          • 1970-01-01
          • 2023-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多