2012-08-22 17 views
1

我想每5秒輪詢一次錨點的href源,以查看該地址處的文件是否存在。當它存在時,在錨點中顯示圖像。換句話說,除非文件存在,否則鏈接基本上不存在。當錨點HREF源不存在時隱藏圖像

我想我將不得不輪詢使用http HEAD請求來確定文件是否存在,然後適當切換圖像。一旦確定文件存在,我可以停止輪詢並使圖像可見。

有沒有更好的方法來做到這一點,任何人都可以建議一些腳本來處理這個功能?

回答

0

如果您的服務器被配置爲這樣做,你可以使用:

http://api.jquery.com/jQuery.ajax/

輪詢文件的通過使用statusCode地圖存在

function checkFile() { 
    $.ajax({ 
     statusCode: { 
      404: function() { 
       //file does not yet exist 
       setTimeout(checkFile, 5000); 
      } 
      200: function() { 
       //file exists. 
       showImage(); 
      } 
     } 
    }); 
} 

您可能會喜歡t來捕獲更多邊緣情況,但是(例如,錯誤回調)。

+0

如果我正確理解AJAX功能,我相信使用這將是最合適的解決方案。我不想下載該文件,只需檢查它是否存在即可。這些不是鏈接圖標。它們是非常大的PDF,它們在大約兩到四分鐘內即時生成。這就是爲什麼我不想顯示鏈接,直到他們準備好。如果我可以在不下載文件的情況下獲得狀態碼,那麼這是一個理想的解決方案。 –

+0

在這種情況下,您將要確保將類型:'HEAD' 添加到匿名對象。 –

0

//注意,這段代碼假定要使用jQuery

var interval = setInterval(function(){ 
    var _el=$('#hrefId'); 
    var href = _el.attr('href'); 
    if(href == null || typeof href == 'undefined' || href == '') 
     return; 

    ajax call to href(in case on ur server(!)) 

    // on success 
    _el.attr('href','TheLink'); 
    $('img', _el).show(); // show image 
}, 5); 
+0

感謝您的幫助... –

0

您還可以使用套接字庫,以便服務器可以在圖像準備就緒時推送通知。 socket.io似乎是一個很好的選擇。

另一種方法是監聽圖像上的error事件,然後等待x毫秒後再嘗試重新加載。這很容易實現,因爲每次定義src屬性時,瀏覽器都會添加新的偵聽器。

它與你的元描述基本相同,但你不需要使用ajax。您還可以從其他域加載圖像(AJAX有一個跨站點策略):

var img = new Image(), 
    src = '/path/to/image.jpg'; 
img.onload = function() { 
    console.log('loaded', img); 
}; 
img.onerror = function() { 
    window.setTimeout(function() { 
     img.src = src; 
    },500); 
}; 
img.src = src;​ 

這裏是一個概念證明:http://jsfiddle.net/L2L3U/。該程序將嘗試加載404圖像三秒鐘,之後,我將src更改爲真實圖像並顯示它。

+0

在我嘗試這個之前,我可能會等到SignalR變得更成熟了。 :) 我不想加載任何東西。我只是想測試相應地址的文件是否存在。 –

+0

好吧,我誤解了,我的印象是,我們在哪裏談論圖像只... – David