11548 sujets

JavaScript, DOM et API Web HTML5

Bonjour...
J'aimerai charger une image à partir d'une url qui est rafraichie toutes les 10 secondes...
j'ai beau mettre des meta "no-cache", mais IE affiche uniquement la premiere image trouvée lors du lancement de la page et qui se trouve semble-til dans le cache...
La seule chose qui fait afficher l'image la plus récente est un "actualiser"...
Et comme j'aimerai uniquement actualiser le div de l'image et pas toute la page, j'utilise du javascript...
Quelqu'un a une idée svp? merci
Modifié par Ralfman68 (06 Sep 2005 - 15:50)
Bonjour.

Le contrôle de la mise en cache s'inscrit dans le protocole http.
Un moyen pour agir sur ce point est la fonction "header" de php :

http://fr.php.net/header

Cette fonction doit être exécutée avant tout émission de code html, et permet d'indiquer finement au navigateur comment traiter les données serveur.

Extrait du manuel :
<?php
// Date du passé
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

// toujours modifié
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");

// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);

// HTTP/1.0
header("Pragma: no-cache");
?>


Ensuite, le code de la page.
Modifié par GeorgesM (04 Sep 2005 - 12:39)
Bonsoir.
Petite remarque : il faut mettre ce code dans le fichier php qui génère l'image et non dans le fichier php qui génère le html.
Si c'est une image en .gif .png ou .jpg, il faut passer obligatoirement par un .php de la manière suivante :


<?php
// le code indiqué dans le post du dessus

header("Content-Type:image/png");
$data = file_get_contents("fichier.png");
header("Content-Length:".strlen($data));

echo $data;
?>
Bonjour.

ça doit marcher... Est-ce que des essais ont été faits ?
Modifié par GeorgesM (05 Sep 2005 - 12:20)
Bonsoir,
Le truc curieux c'est qu'en testant le code ci-dessus pour interdire la mise en cache provoque une erreur 500 chez free...
Je réuitlise le même topic, désolé.

Merci.
Non, cela ne fonctionne pas.
Je signale : je rafraichis l'image en javascript avec un settimeout et mon index.php contenait déja des metas "no-cache et must revalidate"
Merci!
Non, cela ne fonctionne pas.
Je signale : je rafraichis l'image en javascript avec un settimeout et mon index.php contenait déja des metas "no-cache et must revalidate"
Merci!
Tu peux donner le code javascript justement ?

Peut-être en ajoutant un paramètre dépendant du temps (un timestamp par exemple) à la fin du l'URL de la nouvelle image, du genre :

image.jpg[b]?123456789[/b]
Voilà le code :
<script language="javascript">
		refreshcam();caminterval=setInterval('refreshcam'()',10000);
		function refreshcam(){
			photo.getElementsByTagName('img')[0].src='http://perso.wanadoo.fr/ralfdotcom/pics/cam/photocam.jpg';

		}
	</script>

Modifié par Ralfman68 (06 Sep 2005 - 14:12)
Et donc si tu ajoutes un timestamp comme ça :

<script language="javascript">
		refreshcam();caminterval=setInterval('refreshcam'()',10000);
		function refreshcam(){
			var date_actuelle = new Date();
			photo.getElementsByTagName('img')[0].src='http://perso.wanadoo.fr/ralfdotcom/pics/cam/photocam.jpg?' + date_actuelle.getTime();

		}
</script>


ça donne quoi ?
Le navigateur cherche dans son cache en fonction de l'url entière de l'image, et là l'url est différente à chaque rafraichissement (le timestamp ajouté ici est le nombre de millisecondes (sic) écoulées depuis le 1er janvier 1970) donc il va obligatoirement la chercher sur le serveur.

(sinon y aurait eu une piste du côté du mod Apache mod_expires pour fixer la durée de mise en cache des images sans avoir à les passer par la moulinette PHP, mais là ça dépendait de ton hébergeur)
Franchement ça m'épate toute cette science ! Mais c'est tout de même étrange que mes métas "cache-controle" semblent ignorés...
Tes <meta> ne s'appliquent qu'à la page (le code html lui-même), pas aux images (ni à rien d'autre d'ailleurs).

Au fait c'est [résolu] ?