Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Применение библиотек > Prototype + Ajax - не работает в IE, FF


Автор: silvek 30.8.2008, 03:32
Возникла очень неудобная проблема при разработке веб-приложения.

вот простой код:

Код

    new Ajax.Request(path,
                 {
                     method:'post',
                     onSuccess: function(r)
                                 {
                                var data_json = r.responseText;
                                //alert(target);
                                var data = data_json.evalJSON();
                                $(target).innerHTML = data.code;
                                eval(data.js);
                                 }
                     }
            );




Код выполняет загрузку информации в режиме 'post' и передает в контенер свой результат.
Возникает проблема - этот скрипт хорошо работает в Opera, но не работает просто так в IE, FF.


Внимание, если расскоментировать 
Код

                                      //alert(target);


То после отображения всплывающего окна и нажатия в нем на "Ок" - в контейнер загрузится информация.
Напомню, что в Опере информация всегда загружается, а в ИЕ и ФФ только после некоторых действий, например, как вышеописанное.

Очевидно, что связано с кешированием информации или чем-то смежным. Например, если добавить в параметр path случайные числа - иногда срабатывает в ИЕ, но потом опять "кешируется".

Насчет того, что получает с сервера аякс.
Кроме контента я посылаю заголовки:
Код

        header("Cache-Control: no-store, no-cache,  must-revalidate"); 
        header("Expires: " .  date("r"));    


Это не помогает. 


Как мне решить такую проблему?

Автор: Sannis 30.8.2008, 13:23
Было что-то подобное. Попробуйте сделать задержку перед выполнением:
Код

    new Ajax.Request(path,
            {
                method:'post',
                onSuccess: function(r)
                            {
                                var data_json = r.responseText;
                                var data = data_json.evalJSON();
                                
                                setTimeout('update_target()', 500);
                                
                                function update_target()
                                {
                                    $(target).innerHTML = data.code;
                                    eval(data.js);
                                }
                            }
            }
        );

Надеюсь не напутал с замыканиями smile

Автор: silvek 30.8.2008, 14:28
Попробовал - не очень-то помогает.

Вот если возникет окно alert(...) - то контент обновляется, в противном случае нет. 

Что еще можно попробовать?


P.S. Ужас, ничего не помогает. Если менять размер передаваемого кода, то порой ИЕ загружает все-таки, но после "F5" опять пустота. Он как-будто использует какие-то нетипичные принципы кеширования и отброса информации, возможно, это какие-то системы защиты, sandbox'ы и т.п. Хотя я всего-лишь программирую интерактивное приложение.
Попробовал написать в maillist на гугл - там не отвечают, т.е. я видимо как-то написал по английски неправильно - модераторы не разрешили пост.

Автор: Nigel 30.8.2008, 21:33
Что-то мне не верится, что prototype всему виной. Не пробовали то же самое сделать своими силами, без prototype?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)