2009-10-26 3 views
1

В настоящее время я работаю над страницей, которая загружает несколько изображений последовательно, используя setTimeout и onLoad. В основном, когда изображение заканчивает загрузку, запускается onLoad, который запускает загрузку другого изображения по вызову setTimeout. К сожалению, если по какой-либо причине прерывается загрузка изображения, например, последующий вызов ajax, onload никогда не вызывается, и все изображения, которые нужно загрузить, не загружаются. Есть ли способ в javascript обнаружить эту ситуацию? Я попытался подключиться к onError и onAbort (на теге изображения), и ни один из них, похоже, не вызван.Обнаружение отмены загрузки изображения в Javascript

queuePhotos: function(options) 
{ 
    this.init(); 
    this.photo_urls = options.photo_urls; 
    this.photo_size = options.size 
    this.max_width = options['max_width']; 
    this.max_height = options['max_height']; 
    this.containers = options['containers']; 
    yd = YAHOO.util.Dom; 
    photo_tags = yd.getElementsByClassName('image_stub', 'div'); 
    for(i in photo_tags) 
    { 
    //create new image 
    photo = new Image(); 
    this.queue.push({ tag: photo_tags[i], photo: photo }); 
    } 
    setTimeout(photoLoader.prepareNextPhoto, 1); 
}, 

prepareNextPhoto: function() 
{ 
    photo_tag_and_image = photoLoader.queue.shift(); 
    if(photo_tag_and_image) 
    { 
    YAHOO.util.Event.addListener(photo_tag_and_image.photo, "load", photoLoader.appendPhoto, photo_tag_and_image, photoLoader); 
    photo_tag_and_image.photo.src = photoLoader.photo_urls[photo_tag_and_image.tag.id]; 
    } 
}, 

ответ

3

AJAX вызов не должен отменять загрузку изображений. Здесь может быть что-то еще ...

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

+1

«Что-то еще» может быть, если вызов AJAX устанавливает новый innerHTML на элемент, содержащий изображения загрузки, или его родителей. –

0

Вы можете назвать OnLoad и OnError

myImage.onload = function(){ alert("loaded"); }; 
myImage.onerror = function(){ alert("whoops"); }; 

Эрик

Смежные вопросы