2011-04-11 10 views
14

私はいくつかの非常に基本的なjQueryのコードを持っている画像に発射ません。ハードリフレッシュを実行するかブラウザを閉じても、通常のリフレッシュを実行するか、キャッシュを消去せずにいつでも同じURLを2度押すだけで起動します。​​は決して起動しません。jQueryの.LOAD()

これを修正する方法についてのご意見はありますか?

+0

参照してください。関連する回答[ここ](http://stackoverflow.com/questions/126772/how-to-force-a-web-browser-not-to-cache-images) –

+0

それはありがとう!それらの答えを読んだ後に私のより具体的な答えを見てください! –

答えて

4

URLの末尾に、クエリ文字列パラメータとして追加された時間(ミリ秒単位など)を取得するための「ダミー変数」を追加する方法があります。

+0

完璧な、それは働いた! –

+0

それは原油ではない、それは一般的な習慣です。 :) –

+0

@Diodeus - 非常に真実...私はあまりにも悪意を持っていないように投稿を編集します...ありがとう。 –

3

RonとEl Guapoは言ったように、答えはURLの最後にクエリを追加することです。私はこれのようにこれをしました:

$(this).find('img').each(function(){ 
    $(this).attr('src',$(this).attr('src')+'?'+new Date().getTime()) 
}).load(function(){ 
    //This will always run now! 
+0

これを説明する素敵な仕事!!!! –

+3

これは元の質問に答えていますが、画像がブラウザによってキャッシュされるのを防ぎます。ページの読み込みが遅くなるので理想的ではありません。 –

40

私はこれがhas been discussed beforeだと思います。それは問題そのものではなく、タイミングです。イベントハンドラがアタッチされるまでにイメージが既にロードされている可能性があります(決して解雇されることはありません)。これは、たとえば、非常に高速な接続のマルチスレッドブラウザでキャッシュが行われない場合にも発生する可能性があります。幸いにも、あなたが使用することができますプロパティ.completeがあります:

var load_handler = function() { 
    loadedImages++; 
    … 
} 
$(this).find('img').filter(function() { 
    return this.complete; 
}).each(load_handler).end().load(load_handler); 

あなたはまた、機能を添付し、独自のイベントを作成することができます。その後、

jQuery.fn.extend({ 
    ensureLoad: function(handler) { 
     return this.each(function() { 
      if(this.complete) { 
       handler.call(this); 
      } else { 
       $(this).load(handler); 
      } 
     }); 
    } 
}); 

そして、次のようにそれを呼び出す:

$(this).find('img').ensureLoad(function(){ 
    loadedImages++; 
    if(loadedImages == $this.find('img').length){ 
    … 
}); 
+0

イメージの 'src'を動的に変更し、読み込み時に何かを行うためにloadイベントに頼っている場合、イメージが既にキャッシュに入っている場合、手動で読み込みをトリガすることができます:' image.attr( ' src '、); if(image [0] .complete){image.trigger( 'load')} ' – hakunin

+1

これは非常に洗練されたソリューションで、受け入れられたものよりも優れた答えです。受け入れられたものは粗い解決策ですが、キャッシングも防ぎます。私のアプリでは、30以上の高解像度の写真が表示されているので、すべての画像が読み込まれ、サイズが計算されるまで(最初の読み込みに時間がかかる) load()がまったく起動しなくなりました。キャッシングを無効にすると、訪問者が入るたびに読み込みに時間がかかります。 – jeffkee