jQuery :: 画像のリロード
2009/12/10 (Thu) at 6:32 am
Javascriptで(jQueryの話)、既にあるimgタグの中身を更新したい、つまり、src属性の値は同じなんだけれども、画像そのものが変わっているので、強制リロードさせたいとき、たいていのブラウザはキャッシュを呼ぶので、
var src = '/path/to/img.jpg';
$('img').attr('src', src);
とやってもなにも変わりません。くそお。
こんなときには、srcの最後に "?xxxxx"みたいなインチキクエリをくっつけてやると、ブラウザは「ちがう画像だ!」と解釈して新しい画像に差し替えて表示してくれるようになります。"xxxxx" に入る文字列はなんでもいいですが、常にユニークであることが望まれるので、普通はtimestampを使うようです。
var timestamp = new Date().getTime();
$('#img-id').attr('src', $('#img-id').attr('src')+'?'+timestamp);
という風にやると期待通りの結果が得られます。"img-id" というところは、imgタグのidです。もちろんこのぶぶんは、idで指定するだけでなく、jQueryのセレクタ指定が使えます。
「よくわからないヨ」という方は、以下のソースをコピーして適当なファイル名をつけて自分のコンピュータに保存してください↓
<html>
<head>
<script type="text/javascript" src="./jquery-1.3.2.min.js"></script>
<script>
$(function(){
$('#doIt').click(function(){
var timestamp = new Date().getTime();
$('#img-id').attr('src', $('#img-id').attr('src')+'?'+timestamp);
});
});
</script>
</head>
<img src="./img.jpg" id="img-id" />
<button type="button" id="doIt">強制リロード</button>
</html>
htmlファイルと同じ場所に、jquery-1.3.2.min.jsとimg.jpgという名前のjpg画像ファイルを置く。ブラウザで開いてみる。img.jpgと『強制リロード』という名前のボタンが表示される。ブラウザはそのままにしておいて、img.jpgをなんでもいいので他のjpg画像と差し替える。つまりimg.jpgという同じ名前で上書き保存する。ブラウザに戻って『強制リロード』というボタンをクリックする。すると画像が更新されるでしょう?
こういうことをやりたかったのですね。
また、あるいは、src属性に指定されたパスの場所に画像があるかどうか定かでないというパターンもありがちです。なにかのAPIを使って大量の画像を取得して表示するようなサイトとかですね、アイテム数がメチャ多くて、個々の更新頻度が非常に高いショッピングサイトとか。
画像がそのパスにあるかもしれないし、ないかもれしれない。もし画像があれば、それは別の画像に入れ替わっているかもしれないし、前と同じかもしれない。もし別の画像ならキャッシュを更新してリロードして表示させたい。ということをやりたければ、以下のようにすればいいかな↓
function reloadImg(imgPath){
$.ajax({
type: 'GET',
url: imgPath,
cache: false,
success: function(msg){
var _timestamp = new Date().getTime();
$('#img-id').attr('src', imgPath+'?'+timestamp);
}
});
}
というのを考えてみたのですが、画像すべてをこの関数にブチこんで繰り返し処理するというのはよくないと思います。重くなるでしょうきっと。その場合は、サーバ側で画像ファイルの最終更新日を取得して、対象となる画像のidを取得し、それをajaxでクライアントに送り、Javascript側でそのidを持つimgだけを対象に上記のメソッドで処理する。という調子でやるのがいいのかなという気がします。
コメント・プリーズ!
PROFILE![]()
藤居ヒロヤ。ウェブデザイナー/ウェブディレクター。ウェブデザインオフィス、3OT NET主宰。名古屋市中区。「優しいデザイン」「激しいデザイン」「正しいデザイン」「セクシーなデザイン」「泣けるデザイン」「もっともなデザイン」... 。あなただけのウェブデザインを丹精込めておつくり致します。見積り依頼等、お気軽にお問い合わせ下さい。
- www. http://www.3ot.net/
- email. admin [atmark] 3ot.net
- phone. 052 323 7376
RECENT ENTRIES![]()
- トウモロコシがおいしい
- ダイコクドラッグが近所にできた
- ライブドアのBLOGOSをよく読みます
- jQuery :: 画像のリロード
- タムの絵
- Javascript :: ecl.jsにながらくお世話になりました
- サーバ移転&ブログのデザインをすこし変えました
- php :: 正規表現 :: 名前つきキャプチャというのを習った
- jQuery :: ネストしたリスト + ui.sortable.js
- jQuery :: event delegationてナニ?
RECENT COMMENTS![]()
- トウモロコシがおいしい [4]
- ふ (07/09)
- いら (07/03)
- ふ (07/03)
- いら (07/03)
- php :: ファイルを強制的にダウンロードさせる [9]
- ふ (05/26)
- ふ (05/26)
- ふ (05/26)
- esperia (05/26)
- esperia (05/26)
- ふ (05/25)
- esperia (05/25)
- ふ (04/14)
- とほりすがり (04/13)
- タムの絵 [2]
- ふ (12/05)
- いら (12/04)
TOOLS![]()
- s-box.js
- Link2WikipediaEncoder
- QR_CodeGenerator
- PagerankChecker
- IntrocucePhpCodeOnBlog
- FaviconGenerator
- Whois
- SiteThumbnailGenerator (Beta)
- EmailAddressEncoder (Legacy!)
BOOKMARKS![]()
RESOURCES![]()
- 99designs
- COMPUTER ARTS
- CPAN
- PHP標準関数逆引き辞典
- SMASHING MAGAZINE
- UNIXコマンド
- ajaxload.info
- deviantART
- deviantART :: PS Brushes
- deviantART :: PS Shapes
- fotosearch.com
- hotscripts.com
- hotscripts.com :: php
- iconlet.com
- jQuery Reference
- php.net :: 関数レファレンス
- psbrushes.net
- turnkeyforms.com
ARCHIVE![]()
- 2010年7月 (1)
- 2010年1月 (1)
- 2009年12月 (2)
- 2009年11月 (3)
- 2009年10月 (1)
- 2009年9月 (9)
- 2009年8月 (7)
- 2009年6月 (7)
- 2009年5月 (1)
- 2009年4月 (8)
- 2009年3月 (1)
- 2009年1月 (1)
- 2008年12月 (3)
- 2008年11月 (1)
- 2008年4月 (1)
- 2008年1月 (3)
- 2007年12月 (1)
- 2007年10月 (3)
- 2007年9月 (5)
- 2007年8月 (4)
- 2007年7月 (13)
- 2007年6月 (22)
- 2007年5月 (30)
- 2007年4月 (15)
- 2007年3月 (12)
- 2007年2月 (7)
- 2007年1月 (16)
- 2006年12月 (23)
- 2006年11月 (9)
- 2006年10月 (3)
- 2006年9月 (2)
- 2006年8月 (6)
- 2006年7月 (4)
- 2006年6月 (6)
- 2006年5月 (10)
- 2006年3月 (17)
- 2006年2月 (8)
- すべての投稿 (266)
