Pregunta

Corrí hacia un "Espacio de Pila" error al intentar serializar un ASP.Net AJAX objeto de Matriz.

Aquí está el escenario con simplificado código:

  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
    }
    

El código de las páginas de ejemplo y JavaScript aquí.

La publicación de el código de las páginas aspx aquí se plantea un problema.Por favor, compruebe el enlace de arriba para ver el código de las páginas aspx.

Una página web (por defecto.aspx) con un IFrame en que aloja una página de contenido (el contenido.aspx).

Haciendo clic en el "Serializar el Objeto" botón se llama a la función JavaScript serializeObject().La serialización funciona bien para la serie de los objetos creados en la parte superior de la ventana (fuera de cuadro).Sin embargo, si el objeto array se crea en el IFrame, la serialización de bombas con un espacio de pila de error.Caminé a través de ASP.Net AJAX, JS archivos, y lo que he descubierto es decir, el proceso entra en un bucle sin fin, tratando de averiguar el tipo de la matriz objeto.Un sinfín de llamadas para el Número.IsInstanceOf y muy pronto consiga un error de pila.

Alguna idea?

¿Fue útil?

Solución

Este problema ocurre debido a Sys.La serialización.JavaScriptSerializer no puede serializar objetos a partir de otros marcos, pero sólo aquellos objetos que se ejecutan en la ventana actual (que llama a la función serialize() método).La única solución que es conocido para mí es hacer clon del objeto a partir de otro marco antes de llamar a la función serialize() método.

Ejemplo de el clon() methode usted puede encontrar aquí (comentarios en ruso):enlace de texto

Otros consejos

Me he convertido su ejemplo a un conjunto de archivos html estáticos, y descarga el independiente Microsoft Ajax Library 3.5 para realizar la prueba.No tenía problema en Firefox 3 o IE 7, pero me di cuenta de que el primer cuadro de alerta se muestra [] (una matriz), y el segundo {} (un objeto).

Entonces, me convertí en su new Array() código:

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

y después de eso, tengo [1] y {"0", 1} es la cajas de alerta.Yo no creo que el error es con JavaScriptSerializer, sino algo que ver con el paso de objetos a través de marcos.

No tengo manera de probar su código ahora mismo, pero se parece a un error en JavaScriptSerializer.serializar a mí.Mi conjetura es que se trata de hacer algún tipo de comprobación de tipos en la matriz a través de la CLR y que no maneje una matriz vacía correctamente.

¿Has probado a añadir un elemento de un tipo serializable a la matriz en el código?Si es así, ¿qué sucede?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top