1

アンカーのhrefソースを約5秒に1回ポーリングして、そのアドレスにファイルが存在するかどうかを確認したいと思います。存在する場合は、アンカーに画像を表示します。つまり、ファイルが存在しない限り、リンクは基本的に存在しません。

http HEADリクエストを使用してポーリングし、ファイルが存在するかどうかを判断してから、画像を適切に切り替える必要があると思います。ファイルが存在すると判断されたら、ポーリングを停止して画像を表示したままにすることができます。

これを行うためのより良い方法はありますか?この機能を処理するスクリプトを誰かが提案できますか?

4

3 に答える 3

0

ソケットライブラリを使用して、イメージの準備ができたときにサーバーが通知をプッシュできるようにすることもできます。socket.ioはここでは良いオプションのようです。

もう1つの方法は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画像を3秒間ロードしようとします。その後、srcを実際の画像に変更すると、それが表示されます。

于 2012-08-22T08:02:08.883 に答える
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);
于 2012-08-22T07:57:33.323 に答える
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();
            }
        }
    });
}

ただし、さらにいくつかのエッジケースをキャプチャすることもできます(たとえば、エラーコールバック)。

于 2012-08-22T07:57:51.940 に答える