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

jQuery Discussion :

rechargement d'une image map en ajax


Sujet :

jQuery

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut rechargement d'une image map en ajax
    Bonjour,

    Je dois recharger une image et sa map à intervalle régulier via Jquery.

    Code html :
    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
    <!-- le src de l'image est mise à jour via la fonction javascript "reloadImage" -->
    <img id="image" src="/SVGImageBuilderServlet' />" usemap="#idMap" alt="" />
    <div id="divMap">
    <!-- Le code HTML de la map "idMap" est placé dans cette div via la fonction javascript "reloadMap" -->
    </div>
    
    
    <script type="text/javascript" src="<c:url value='/scripts/test.js' />"></script>
    
    <script type="text/javascript">
    $(document).ready(function(){ 	
            test.reloadImage();
    	test.reloadMap();
    }); 
    </script>
    Code javascript de test.js :
    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
    30
    31
    32
    33
    34
    35
    36
     
    // namespaces
    if (test === undefined) var test = {};
     
    test = function() {
     
    	/**
    	 * Provoque le rechargement de l'image
    	 */
    	 var reloadImage = function() {
    		var img = $("#image");
                    // imgUrl pointe vers une servlet qui génère un svg et transcode en jpg
    		var imgUrl = img.attr("src");
    		imgUrl = test.utils.setUrlParam(imgUrl, "goal", "reloadImg");
    		imgUrl = test.utils.setUrlParam(imgUrl, "timestamp", new Date().getTime());
    		img.attr("src", imgUrl);
    	};
     
    	/**
    	 * Recharge la map
    	 */
    	var reloadMap = function() {
    		var img = $("#image");
                    // Pour le rechargement de la map, on utilise la même servlet mais avec un goal différent. 
                    // La servlet nous renvoi le code html de la map
    		var imgUrl = img.attr("src");
    		imgUrl = test.utils.setUrlParam(imgUrl, "goal", "reloadMap");
    		imgUrl = test.utils.setUrlParam(imgUrl, "timestamp", new Date().getTime());
    		$("#divMap").load(imgUrl, {goal : "reloadMap"});
     
    	};
    return {
    		reloadImage:reloadImage,
    		reloadMap:reloadMap,
    	};
    }();
    J'appelle les deux fonctions reloadImage et reloadMap :
    - après un $(document).ready(function() au chargement de ma page
    - dans un callback d'une progressBar
    - sur l'évènement click de cette même progressBar

    Au premier chargement de la page, la map est bien prise en compte.
    Le problème se situe sur les rechargements "Ajax" de la progressBar. La nouvelle map n'est pas prise en compte dans le navigateur alors qu'elle est bien à jour dans le code généré. Le DOM est donc bien modifié mais le navigateur ne le prend pas en compte. Je penche pour un espèce de problème de cache.

    J'ai donc tenté les choses suivantes sans succès :
    - désactivation du cache via FireBug
    - génération d'un id unique pour le usemap de l'image et le nom de la map pour forcer l'image à reloader sa map
    - reloader d'abord la map puis l'image

    Peut être que je ne comprend pas très bien les mécanismes de chargement des image map mais là je n'ai plus de piste

    Quelqu'un ?

  2. #2
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    tu attribues le map direct en innerHTML ...
    essaye de te faire une petite routine qui passerait pas la creation DOM du map


    [edit]
    a piroiri il faut aussi reloader l'image pour qu'elle prenne en compte son map ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Je comprend pas ce que tu veux dire par :
    "petite routine qui passerait pas la creation DOM du map"
    Tu peux préciser ?

    Existe-t-il une technique pour forcer le reload complet d'une image, parce que à part la technique de l'update du src de l'image avec un timestamp, je n'ai rien trouvé d'autre.

    Que pensez vous de cette piste : ne charger l'image qu'à la fin du chargement de la map dans le DOM ? C'est possible de faire ca avec Jquery ?

    Merci d'avance

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    J'ai une solution fonctionnant sans reload complet de l'image (que je trouve un lourd juste pour prendre en compte une mise à jour de map).

    Extrait de la fonction ReloadMap :
    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
     
    var reloadMap = function() {
    		var img = $("#image");
                    // Pour le rechargement de la map, on utilise la même servlet mais avec un goal différent. 
                    // La servlet nous renvoi le code html de la map
    		var imgUrl = img.attr("src");
    		imgUrl = test.utils.setUrlParam(imgUrl, "goal", "reloadMap");
    		imgUrl = test.utils.setUrlParam(imgUrl, "timestamp", new Date().getTime());
     
                    $("#divMap").load(imgUrl, {goal : "reloadMap"},function() {
    			if ($.browser.msie){
    				// Pas besoin d'id unique pour la bonne prise en compte
    				// de la nouvelle map sous IE
    				img.attr("usemap", "#imgMap");
    			}else{
    				// Sinon on passe par l'utilisation d'un id unique pour l'attribut 
                                    // usemap de l'image et name de la map
    				var idUnique = new Date().getTime();
    				$("#divMap map#imgMap").attr("name","imgMap"+idUnique);
    				img.attr("usemap", "#imgMap"+idUnique);
    			}
    		});
                    // l'attribut name et id de la map générée est "imgMap" 
     
    	};
    J'utilise une fonction en callback du load() qui recharge uniquement l'attribut usemap de l'image et ca suffit.

    Merci à SpaceFrog pour son aide via MP

  5. #5
    Membre à l'essai
    Inscrit en
    Janvier 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 17
    Points : 20
    Points
    20
    Par défaut
    Faut passer en résolu : Done

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

Discussions similaires

  1. [AJAX] recharger une google map avec ajax
    Par freddy000 dans le forum AJAX
    Réponses: 0
    Dernier message: 22/05/2011, 11h47
  2. [AJAX] Charger une image aléatoire en Ajax
    Par Scrat66 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/12/2008, 12h49
  3. Rechargement d'une image
    Par JamesP dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 30/09/2007, 23h15
  4. Réponses: 2
    Dernier message: 13/06/2007, 15h40
  5. [AJAX] Afficher une image GD avec ajax
    Par darkvodka dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 05/06/2007, 00h43

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