gpt4 book ai didi

ASP.Net AJAX JavaScript 序列化错误

转载 作者:行者123 更新时间:2023-11-30 13:44:11 26 4
gpt4 key购买 nike

尝试序列化 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,很快就会出现堆栈错误。

有什么想法吗?

最佳答案

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

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

关于ASP.Net AJAX JavaScript 序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com