Функция, вызывающая переполнение стека в IE9

У меня есть следующий фрагмент кода, который извлекает URL-адрес изображения из сценария PHP через ajax на основе параметра, который я передаю этой функции. В результате существующее изображение исчезает (jQuery), атрибут src получает новое изображение, а изображение снова исчезает. Это работает как шарм в Chrome, Firefox и т. Д., Однако IE9 выдает ошибку:

'SCRIPT28: Out of stack space' (Сценарий 28: недостаточно места в стеке)

Если я переключаю IE9 в режим IE8 или IE7, он работает нормально, даже если ошибка все еще появляется, но в IE9 она не запускается. Где я ошибаюсь?

function imager(dt){
    $('.ct_img').fadeOut(400);
        var urip = homeURL + '/qwm/CF_QRGR/' + encodeURIComponent(dt) + '/';
        $.ajax({url:urip, success:function(result){
            
            $.doTimeout(400,function(){
                if(result=='0'){
                $('.ct_img').attr('src',homeURL + '/public/img/site/load_fail_message.jpg').bind('load', function (e) {
                    $('.ct_img').fadeIn(400)
                        });
                } else {
                $('.ct_img').attr('src',homeURL + '/public/img/bank/vault/' + result).bind('load', function (e) {
                    $('.ct_img').fadeIn(400)
                        });
                }
                });
                
        }
        });
    
    
}

person ShadowFax    schedule 08.10.2012    source источник
comment
Возможно, вы попали в описанное здесь состояние: stackoverflow.com/questions/6280469/   -  person Alfabravo    schedule 08.10.2012
comment
Я действительно видел это. Я не уверен, что следую приведенным там советам. Я думаю, здесь нет очевидной рекурсии.   -  person ShadowFax    schedule 08.10.2012


Ответы (2)


Я подозреваю, что это привязка к событию. Работает ли привязка событий без jQuery? Может ли быть много классов .ct_img? Потому что это заменит все их src и, возможно, это его перегрузит? Итак, здесь, используя ID вместо

    var img = document.getElementById( "ct_img");
    img.src = url;
    img.onload = function() {
        $('#ct_img').fadeIn(400);
     };

Я не знаю, есть ли у IE полные трассировки стека, но чтобы увидеть, есть ли у вас рекурсия, вы можете консольный журнал

 arguments.callee.caller.name.toString()

чтобы узнать, какой метод его вызывает.

person FlavorScape    schedule 08.10.2012
comment
Спасибо вам большое за это ! Работает !! - person ShadowFax; 09.10.2012
comment
Вы думаете, что это было потому, что это было в идентификаторе класса, а не в одном элементе dom? Или вы думаете, что что-то не так с привязкой событий jQuery? - person FlavorScape; 09.10.2012
comment
Я просто обошел jQuery, используя рекомендованный вами код, и он сработал! Я не совсем уверен, была ли это проблема с идентификатором / классом. - person ShadowFax; 09.10.2012

даже в IE10 нет полной (нулевой) трассировки стека, трудно отладить ... Эта ошибка может быть вызвана несколькими другими причинами: / В моем случае я пытаюсь разобрать форму в один объект JS и все еще получаю эту ошибку SCRIPT28: Недостаточно места в стеке, даже если никакие события не привязаны к входам и не инициируют какое-либо событие.

Но я заметил одну вещь, когда режим браузера: IE9 Document Mode: IE7 --- я получаю эту ошибку (например, на dell.com) --- при ручном переключении в режим документа: IE9, эта ошибка исчезает ...

РЕДАКТИРОВАТЬ:

успешно решил мою проблему:

Я использовал: console.log (JSON.stringify (object));

объект содержал тысячи параметров из поля выбора ... поэтому даже слишком много console.logging может вызвать SCRIPT28: Out of stack space (особенно при использовании с JSON.stringify)

person Pavel Křupala    schedule 17.01.2013
comment
Мертвый, спасибо. Режим документа был установлен на IE7, что приводило к его поломке! - person Mark Pieszak - Trilon.io; 24.01.2014