IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

cache : vider le cacher sans rechargement


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut cache : vider le cacher sans rechargement
    Bonjour à tous !

    Ceci est mon premeir message dans ce forum et après beaucoup de recherches sans réponses, j'espere ne pas enfreindre de règles.

    Je developpe actuellement une application de galerie d'image en ajax (avec php comme langage serveur).

    tout marche bien, excepté, un problème lors de la suppression d'images. Lorsque je supprime l'image (en ajax) la page ne se recharge pas (c ce que je veux c pour ca que je le fais en ajax) mais si l'image est correctement supprimée, elle n'est pas supprimée de la mémoire cache. Je suis obligé de réactualiser la page, malgré les balise header() permettant de vider le cache pour que la suppression soit prise en compte à l'oeil de l'internaute.

    autrement, l'image supprimée semble toujorus présente pour l'internaute, ce qu iest problématique.

    autrement dit, le but serait de vider le cache dynamiquement, sans avoir a recharger toute la page. est-ce possible ? si oui, comment ?

    j'espere avoir été assez clair, et je vous remercie de vos réponses !

  2. #2
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Quel est ton probleme fonctionelle ?

    Au niveau technique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    but serait de vider le cache dynamiquement, sans avoir a recharger toute la page. est-ce possible ? si oui, comment ?
    Non pas explicitement et pas en javascript et/ou en HTML

    Au niveau technique pour contourner le probleme c est en generale d ajouter un timestamp a tes resources, mais la je vois pas quelle est le souci pour l'utilisateur ?

    Il revoit une ancienne image dans son browser ?

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    envoie ta requete avec un timestamp ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut
    Citation Envoyé par magnus2005
    Au niveau technique pour contourner le probleme c est en generale d ajouter un timestamp a tes resources, mais la je vois pas quelle est le souci pour l'utilisateur ?

    Il revoit une ancienne dans son browser ?
    Exactement. En fait, lorsqu'un utilisateur supprime une de ses photos, je renomme la derniere photo de la base de données du même album avec omme nouveau nom le nom de la photo supprimée et je supprime la dernière entrée de la table dans ma base de données.

    Rien ne vaut un peu de code :

    Voici la requete ajax :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    //On instancie l'objet Xhr
    var req_delete_photo = getHttpObject();
     
    // Suppression de la photo
    function delete_photo(photo, defaut)
    {
    	req_delete_photo.open('GET', 'modules/photos/delete_photo.php?photo=' + photo,true); //on passe la photo en parametre dans l'url
    	req_delete_photo.onreadystatechange = resp_delete_photo;
    	req_delete_photo.send(null);
    }
     
    function resp_delete_photo()
    {
    	$("photo_plus").style.display = "block"; //on rend le bloc "photo_plus" visible"
    	if (req_delete_photo.readyState == 4)
    	{
    		if (req_delete_photo.status == 200)
    		{	
    			$("photo_plus").innerHTML = req_delete_photo.responseText; //affichage de la reponse du serveur dans "photo_plus"
    			setTimeout("display_photo(0,-1)",100); //reafichage de la photo
    		}
    		else
    			$("photo_plus").innerHTML = "Suppression impossible en raison d'une erreur serveur";
    	}
    	else
    		$("message").innerHTML = "Suppression en cours...";
     
    }
    Et voici une petite partie du code php du fichier delete_photo.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    $photo = $_GET['photo']; //photo correspond à l'url de la photo
    $last_photo = $photos[sizeof($photos)-1]->url; //last_photo est la derniere photo de l'album du même user
     
    unlink($photo); //on supprime la photo
    rename($last_photo,$photo); //on renomme la derniere photo
     
    $sql="DELETE FROM photos WHERE photos.id_user='$id' AND photos.url = '$last_photo'";
    $delete=db_query($sql);
     
    ?>
    Donc voila effectivement un timestamp peut être la solution mais comment l'intégrer ?

    Merci pour vos réponses !

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	req_delete_photo.open('GET', 'modules/photos/delete_photo.php?photo=' + photo+'& '+new Date(),true);
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre très actif Avatar de magnus2005
    Profil pro
    Ingenieur SI
    Inscrit en
    Avril 2005
    Messages
    454
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingenieur SI

    Informations forums :
    Inscription : Avril 2005
    Messages : 454
    Par défaut
    Pour le timestamp suffit de mettre du code bidon mais créeant une URL unique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var date = new Date();
    var myurl ="modules/photos/delete_photo.php?photo=" + photo +"&timestamp=" + date.getTime();
    xhr.open("GET",myurl,true);

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 36
    Par défaut
    Je vous remercie, malheureusement ca ne marche toujours pas.

    J'ai rajouté le timestamp, mais malgré tout il ne vide pas le cache. aurais-je un problème avec mes header ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache');
    Ils sont présents dans la page php d'affichage de photo et dans la page php de suppression de photo delete_photo.php

    ou alors il y a une autre manipulation a faire avec le timestamp ?

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    en fait tu veux juste faire une mise à jour visuelle pour le client ...

    fais une petit fonction javascript qui supprimera l'element du visuel ....

    elle est l'image dasn le code de la page ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vider 1 fichier sans le supprimer
    Par wodel dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2006, 16h03
  2. [PHP-JS] Envoi de fichier sans recharger la page
    Par goldorax113 dans le forum Langage
    Réponses: 8
    Dernier message: 30/05/2006, 17h43
  3. [C#][JS] Sur clic : message sans recharger la page
    Par FoxDeltaSierra dans le forum ASP.NET
    Réponses: 8
    Dernier message: 24/01/2006, 17h20
  4. Déplacement dans une page sans recharge
    Par EpOnYmE187 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 30/08/2005, 16h17
  5. Changer la police avec un select, sans recharger la page
    Par Netoman dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/12/2004, 18h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo