Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » javascript Image onLoad после onError

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Kosta_piter



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Господа, прошу помощи.
на страничке в цикле подгружается картинка через промежуточную Image.
Если подгружаемая картинка пропадает с сервера, загружается затычка NoImage.
Так вот, если загружаемая картинка изначально есть, то она показывается. Затем, она пропадает с сервера, появляется затычка. А вот дальше, после появлении вновь этой картинки, она уже вновь не отображается!
Сделал тестовый флаг, он показывает срабатывание событий onLoad и onError.
Так вот, после срабатывания onError - событие onLoad уже больше не срабатывает. Хоть картинка и появляется (событие onError при появлении картинки на сервере перестает срабатывать).
Вот код html:
<CODE>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<HTML>
    <head>
        <script type="text/javascript">
            function clock()
            {
                document.getElementById('label1').innerHTML = flag;
                img.src = img_src;
                setTimeout("clock()",1000);
            }
            var i = 0;
            var flag = "";
            var img_src = 'http://localhost/cam.jpg';
            var img = new Image();
            img.onerror = function (evt){
                flag = "_Err" + i; i++;
                document.getElementById("cam").src = 'http://localhost/noimage.jpg';
                }
            img.onload = function (evt){
                flag = "_OK" + i; i++;
                document.getElementById("cam").src = this.src;
                }
            onload = clock;
        </script>
    </head>
    <BODY marginwidth="0" marginheight="0" topmargin="0" leftmargin="0">
        <span id="label1" style="font:bold 15px Arial; color:#DC5912;"></span>
        <br />
        <div id="cam_div"><img id='cam'></div>
    </BODY>
</HTML>
</CODE>

Всего записей: 90 | Зарегистр. 16-06-2005 | Отправлено: 15:57 18-01-2014
LordMicro



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всё довольно просто, браузер кэширует картинку. Исправь свою функцию на это:

Код:
 
            function clock()  
            {  
                document.getElementById('label1').innerHTML = flag;  
                img.src = img_src + '?_=' + (new Date().getTime());  
                setTimeout("clock()",1000);  
            }
 

И всё получится!

Всего записей: 141 | Зарегистр. 17-02-2006 | Отправлено: 21:14 18-01-2014
Kosta_piter



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
LordMicro
К сожалению, не в этом дело.
Я это уже добавил после создания темы. Даже добавлял тег:
<meta http-equiv="Cache-Control" content="no-cache">
Отключение кэширования не помогает потому, что у меня проблема не с загрузкой новой картинки, а со срабатыванием функции onLoad. Именно обработчик onLoad не срабатывает после срабатывания onError. Это видно по инкрементальному счетчику в моем примере. Он перестает считать.

Всего записей: 90 | Зарегистр. 16-06-2005 | Отправлено: 01:05 19-01-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kosta_piter

Цитата:
<meta http-equiv="Cache-Control" content="no-cache">  

да на это, собственно, браузер и не обязан реагировать. лучше добавлять случайный элемент после адреса картинки.

Цитата:
 Именно обработчик onLoad не срабатывает после срабатывания onError.

добавьте в обработчики  
console.log(new Date() + ' тут названием события')
ну и смотрите консольные сообщения в браузере
если время меняется - значит все работает.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:41 19-01-2014 | Исправлено: Cheery, 01:46 19-01-2014
LordMicro



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Kosta_piter
Ну лан... давай тогда залезем в дебри. В общем я проверил твой код. На локалхосте он работает. На сервере работает.
Проверял в браузерах: Firefox 26.0, Chrome 32.0.1700.76 m, IE 8.0.6001.18702
 
Теперь расскажи поподробней про твою конфигурацию тестов, на котором не работает.
 
А и ещё... и счётчик считает всё время, при убирании картинки - оно в трёх браузерах обновляется на noimage.jpg. Когда подсовываю обратно - то возвращается cam.jpg

Всего записей: 141 | Зарегистр. 17-02-2006 | Отправлено: 17:00 19-01-2014 | Исправлено: LordMicro, 17:01 19-01-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » javascript Image onLoad после onError


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru