Произошла ошибка «Out of Stack Space» при попытке сериализации объекта массива 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.
Веб-страница (default.aspx) с IFrame, на которой размещается страница содержимого (content.aspx).
Нажатие кнопки «Сериализировать объект» вызывает функцию JavaScript serializeObject (). Сериализация отлично работает для объектов Array, созданных в верхнем окне (вне рамки). Однако, если объект массива создан в IFrame, сериализация бомб с ошибкой пространства вне стека. Я прошел через ASP.Net AJAX JS-файлы и обнаружил, что процесс идет в бесконечный цикл, пытаясь выяснить тип объекта массива. Бесконечный вызов Number.IsInstanceOf и довольно скоро вы получите ошибку выхода из стека.
Есть идеи?