0
我有一個頁面,其中實時顯示帶有圖像的事件流。由於它是實時的(事件發生時),因此它可能還沒有完全可用,因爲它仍然被上傳到存儲。JQuery延遲排隊呼叫
調用來獲得新的事件執行每兩秒鐘,每次調用可以返回多達20個事件(最新的20),但通常它是介於0和5
由於圖像的問題可能不加載最初,onerror
功能用於:
<img onerror="retryImage(this, 'imageUrl', 0)" src="imageUrl" />
function retryImage(source, url, attempts) {
img = new Image();
img.src = url + '?' + (new Date()).getTime();
img.onload = function() {
source.src = img.src;
};
img.onerror = function() {
if (attempts > 4) {
source.src = 'not_found.png';
} else {
source.src = 'loading.gif';
attempts++;
$(this).delay(2000).queue(function() {
retryImage(source, url, attempts);
$(this).dequeue();
});
}
};
return true;
}
的想法是嘗試加載圖像,如果失敗,等待幾秒鐘,然後再試一次,最多5次。
不幸的是,在實踐中每次偶爾(當多個圖像同時初始加載失敗時),其中一個顯示的圖像將屬於不同的事件。這導致我認爲我在濫用delay()
和queue()
函數?
有什麼想法?
僅供參考 - 我標誌着這個答案正確的,因爲它根據的問題(我.delay的使用'()'和'.queue()')是正確的 - 但它並沒有解決加載不正確圖像的整體問題。這個問題是由於'img'變量是在全局而不是本地聲明的(即'var img = new Image()')...愚蠢的疏忽! – user3282203