Comment rafraîchir un élément(image) en jQuery
Est-il possible de recharger une image avec le même nom de fichier à partir d'un serveur à l'aide de jQuery?
Par exemple, j'ai une image sur une page, cependant, la physique de l'image peut varier en fonction des actions de l'utilisateur. Remarque, cela ne signifie pas que le nom du fichier change, mais le fichier lui-même.
ie:
- Utilisateur affiche l'image sur la page par défaut
- Utilisateur télécharge de nouvelles images
- Image par défaut sur la page ne change pas(je suppose que c'est en raison du nom de fichier étant identique, le navigateur utilise la version mise en cache)
Indépendamment de la façon dont souvent le code ci-dessous est appelé, le même problème persiste.
$("#myimg").attr("src", "/myimg.jpg");
Dans le jQuery documentation, la "charge" de la fonction, ce serait parfait si il avait un défaut de la méthode de cuisson de la manifestation, par opposition à la liaison d'une fonction de rappel pour le succès d'une/de chargement complet d'un élément.
Toute aide est grandement appréciée.
- est votre problème est que l'image est mis en cache dans le navigateur et ne sera pas mise à jour après qu'il a été modifié sur le serveur?
- Je crois que c'est la question que le fichier ne fait changer(même nom) et se reflète sur la page si vous effectuez une actualisation de la page entière.
Vous devez vous connecter pour publier un commentaire.
Il sonne comme il est de votre cache de navigateur de l'image (qui, je le remarque maintenant que vous avez écrit dans votre question). Vous pouvez forcer le navigateur à recharger l'image en passant une variable supplémentaire comme suit:
random
, et ne devrait jamais être avecDate
sauf si vous êtes vraiment rapide. ;^) L'obtention d'une date sur le client n'est pas gourmand en ressource, et vous pourriez réutiliser pour autant d'images que vous avez besoin de tirer à la fois, afin de procéder à l'étape 4. Le Profit.Ce n'est probablement pas le meilleur moyen, mais j'ai résolu ce problème dans le passé, simplement en ajoutant un horodatage à l'URL de l'image à l'aide de JavaScript:
La prochaine fois, il charge, le timestamp est le temps actuel et l'URL est différente, de sorte que le navigateur est un GET pour l'image au lieu d'utiliser la version mise en cache.
imagename.jpg?t=1234567&q=.jpg
ouimagename.jpg#t1234567.jpg
Cela pourrait être l'un des deux problèmes que vous mentionnez vous-même.
Pour être honnête, je pense que c'est le numéro deux. Serait beaucoup plus facile si nous pourrions voir un peu plus jQuery. Mais pour commencer, essayez de supprimer l'attribut d'abord, puis le configurer à nouveau. Juste pour voir si cela aide:
Même si cela fonctionne, poster du code, puisque ce n'est pas optimal, l'omi 🙂
avec une seule ligne, pas de soucis à propos de coder en dur l'image src dans le javascript (merci à jeerose pour les idées:
De contourner la mise en cache et éviter d'ajouter infini les horodatages pour l'url de l'image, la bande de la précédente timestamp avant d'en ajouter une nouvelle, c'est la façon dont je l'ai fait.
Cela fonctionne très bien! toutefois, si vous rechargez la src à plusieurs reprises, l'horodatage obtient concaténé à l'url. J'ai modifié les accepté de répondre à gérer.
Avez-vous essayé de réinitialiser l'image des conteneurs html. Bien sûr, si c'est le navigateur qui est de la mise en cache alors ce ne serait pas aider.
Certains moments réellement de solution comme -
aussi de ne pas actualiser src correctement, essayez celui-ci, il a travaillé pour moi ->
À l'aide de "#" comme un délimiteur peut être utile
Mes images sont conservées dans un "caché" dossier "www" de sorte que seuls les utilisateurs enregistrés sont autorisés à accéder à eux. Pour cette raison, je ne peux pas utiliser l'ordinaire
<img src=/somefolder/1023.jpg>
mais je envoyer des requêtes vers le serveur comme<img src=?1023>
et il répond en renvoyant l'image gardé sous le nom de "1023'.L'application est utilisée pour le recadrage de l'image, donc, après une requête ajax pour recadrer l'image, il est modifié comme contenu sur le serveur, mais conserve son nom d'origine. Afin de voir le résultat de la délibération, après la requête ajax a été achevée, la première image est supprimée de la DOM et une nouvelle image est insérée avec le même nom
<img src=?1023>
.Pour éviter d'encaissement-je ajouter de la demande, le "temps" de la balise préfixé par "#", de sorte qu'il devient comme
<img src=?1023#1467294764124>
. Le serveur filtre automatiquement la valeur de hachage de la partie de la demande et répond correctement par l'envoi de mon image conservée comme "1023'. Donc je suis toujours la dernière version de l'image sans trop de serveur-côté de décodage.J'ai peut-être recharger la source de l'image plusieurs fois. J'ai trouvé une solution avec Lodash qui fonctionne bien pour moi:
Existant horodatage sera tronqué et remplacé par un nouveau.
Basé sur @kasper Taeymans réponse.
Si u ont simplement besoin de recharger l'image (pas de remplacer la src avec qch nouveau), essayez:
JS:
HTML:
}