2013-02-26 53 views
0

我在上傳後刷新頁面上的圖像時遇到問題。我將多部分圖片發佈到隱藏的iframe。然後我使用JavaScript回調來更改原始圖像。它有時可用,但並非總是如此。jQuery新文件上傳後刷新圖像

這不是一個緩存問題,因爲我試圖附加到URL沒有效果。 Chrome和Firefox也是一致的,所以我不懷疑瀏覽器。

在所有情況下,如果我刷新整個頁面,則是正確的。

如果我用Chrome檢查元素,它似乎將圖像顯示爲數組?有人可以解釋發生了什麼事嗎?

感謝

上傳的servlet用(iFrame內)結束:

<script>parent.changeImage('/cdn/orig/prof-1.gif')</script> 

的呼叫:

function changeImage(image){ 
    $("#store-image").attr('src', ''); 
    var ts = new Date().getTime(); 
    $("#store-image").attr('src', image+"?"+ts);     
} 

然後幾個加載後,Chrome的檢查表明:

Frames 
    file.jsp 
     images 
      image-1.gif 
      image-1.gif 
      image-1.gif 
      image-1.gif 
      image-1.gif 

它們旁邊都有不同的縮略圖。

爲什麼JavaScript構建一個數組?

回答

0

可能已經解決了它...

在服務器端,我是靠使用相同的文件名覆蓋舊的文件。我認爲由於文件系統的滯後,瀏覽器有時能夠在新文件可用之前抓取舊文件 - 儘管就程序而言寫入完成。

我更改了代碼以先刪除舊的代碼,然後服務器使用相同的名稱寫入新文件。這似乎阻止了瀏覽器抓取舊的,而是等待新的下載。 Chrome不再列出該文件幾次...

我們將會看到。

+0

我會做@賈尼建議如果你這樣做。強制瀏覽器刷新。有點像使用myCSS.css?version = v2放置一個新的CSS文件。但是,如果您依賴服務器端而不是每次上傳具有相同名稱的新服務器,請清除服務器上該項目的緩存。 – ClosDesign 2013-02-27 16:28:12

1

爲什麼不在每次上傳時更改圖像名稱?你面臨的問題實際上只是冰山一角。 Web服務器會緩存靜態內容,並且在刷新此緩存之前需要時間。一些瀏覽器可以持久地緩存靜態內容。一些緩存代理做同樣的事情。

如果你不願意改變文件名,至少在img src中增加一些遞增參數。像myimage.gif?1235698