Apakah mungkin memuat ulang gambar dengan nama file yang identik dari server menggunakan jQuery?
Misalnya, saya memiliki gambar pada halaman, namun, gambar fisik dapat berubah berdasarkan tindakan pengguna. Catatan, ini tidak berarti nama file berubah, tetapi file yang sebenarnya itu sendiri.
yaitu:
- Pengguna melihat gambar pada halaman default
- Pengguna mengunggah gambar baru
- Gambar default di halaman tidak berubah (saya menganggap ini karena nama file identik, browser menggunakan versi cache)
Terlepas dari seberapa sering kode di bawah ini dipanggil, masalah yang sama tetap ada.
$("#myimg").attr("src", "/myimg.jpg");
Dalam dokumentasi jQuery, fungsi "load" akan sempurna jika memiliki metode default untuk menembakkan peristiwa yang bertentangan dengan pengikatan fungsi callback ke pemuatan elemen yang berhasil / lengkap.
Setiap bantuan sangat dihargai.
Jawaban:
Kedengarannya seperti itu browser Anda yang sedang meng-cache gambar (yang sekarang saya perhatikan Anda tulis di pertanyaan Anda). Anda dapat memaksa browser untuk memuat ulang gambar dengan mengirimkan variabel tambahan seperti:
sumber
random
, dan tidak pernah harus denganDate
kecuali Anda benar-benar sangat cepat. ; ^) Mendapatkan kencan pada klien bukanlah sumber daya yang intensif, dan Anda dapat menggunakan kembali sebanyak mungkin gambar yang perlu Anda tarik sekaligus, jadi lanjutkan ke langkah 4. Untung.Ini mungkin bukan cara terbaik, tapi saya telah memecahkan masalah ini di masa lalu dengan hanya menambahkan stempel waktu ke URL gambar menggunakan JavaScript:
Lain kali ketika memuat, stempel waktu diatur ke waktu saat ini dan URL berbeda, sehingga browser melakukan GET untuk gambar alih-alih menggunakan versi cache.
sumber
imagename.jpg?t=1234567&q=.jpg
atauimagename.jpg#t1234567.jpg
Ini bisa menjadi salah satu dari dua masalah yang Anda sebutkan sendiri.
Sejujurnya, saya pikir ini nomor dua. Akan jauh lebih mudah jika kita bisa melihat lebih banyak jQuery. Tapi sebagai permulaan, coba hapus atributnya terlebih dahulu, lalu atur kembali. Hanya untuk melihat apakah itu membantu:
Bahkan jika ini berhasil, posting beberapa kode karena ini tidak optimal, imo :-)
sumber
dengan satu baris tanpa khawatir tentang hardcoding src gambar ke dalam javascript (terima kasih kepada jeerose untuk ide-ide:
sumber
Untuk mem-bypass caching dan menghindari menambahkan cap waktu tak terbatas ke url gambar, lepaskan cap waktu sebelumnya sebelum menambahkan yang baru, beginilah cara saya melakukannya.
sumber
Ini sangat bagus! namun jika Anda memuat ulang src beberapa kali, stempel waktu akan digabungkan ke url juga. Saya telah memodifikasi jawaban yang diterima untuk menghadapinya.
sumber
Sudahkah Anda mencoba mengatur ulang wadah gambar html. Tentu saja jika browser yang melakukan caching maka ini tidak akan membantu.
sumber
Beberapa kali sebenarnya solusi seperti -
juga tidak menyegarkan src dengan benar, coba ini, itu berhasil untuk saya ->
sumber
Menggunakan "#" sebagai pembatas mungkin berguna
Gambar saya disimpan di folder "tersembunyi" di atas "www" sehingga hanya pengguna yang login yang diizinkan mengaksesnya. Untuk alasan ini saya tidak bisa menggunakan yang biasa
<img src=/somefolder/1023.jpg>
tapi saya mengirim permintaan ke server seperti<img src=?1023>
dan itu merespon dengan mengirim kembali gambar yang disimpan dengan nama '1023'.Aplikasi ini digunakan untuk memotong gambar, jadi setelah permintaan ajax untuk memotong gambar, itu diubah sebagai konten di server tetapi tetap menggunakan nama aslinya. Untuk melihat hasil pemangkasan, setelah permintaan ajax selesai, gambar pertama dihapus dari DOM dan gambar baru dimasukkan dengan nama yang sama
<img src=?1023>
.Untuk menghindari menguangkan saya menambahkan ke permintaan tag "waktu" yang diawali dengan "#" sehingga menjadi seperti
<img src=?1023#1467294764124>
. Server secara otomatis menyaring bagian hash permintaan dan merespons dengan benar dengan mengirim kembali gambar saya disimpan sebagai '1023'. Jadi saya selalu mendapatkan versi terakhir dari gambar tanpa banyak decoding sisi server.sumber
Saya mungkin harus memuat ulang sumber gambar beberapa kali. Saya menemukan solusi dengan Lodash yang berfungsi baik untuk saya:
Stempel waktu yang ada akan dipotong dan diganti dengan yang baru.
sumber
Berdasarkan jawaban @kasper Taeymans.
Jika Anda hanya perlu memuat ulang gambar (bukan ganti src dengan smth baru), coba:
sumber
}
sumber