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 :

Modifier XML côté client


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut Modifier XML côté client
    Bonjour,

    je crée un système de webmapping adaptatif et, apparemment, une solution possible réside dans la modification côté client du fichier de mise en forme de la carte (fichier en XML).

    Plus en détail, le fonctionnement du système :
    - mon serveur cartographique (MAPSERVER) permet de générer un service WMS
    - côté client openlayer charge ce service pour l'afficher. Une option est d'affecter un SLD (Styled Layer Descriptor) qui définit les règles d'affichage du WMS dans la fonction WMS d'openlayer. Je pense qu'on peut voir le SLD du WMS comme le CSS pour le HTML.
    - côté client toujours, j'ai une liste déroulante dans ma page HTML qui propose plusieurs choix (rien, bleu, rouge, vert, ...).

    Ce que je voudrais faire, c'est que lorsque l'utilisateur sélectionne un choix dans la liste déroulante, le fichier XML soit modifié seulement du côté client pour la durée de la session de l'utilisateur.

    Je débute complètement en développement web et malgré un certain nombre de livres/tutoriels je ne vois toujours pas comment faire. J'ai trouvé un tutoriel qui explique pas à pas mais le résultat de la modification côté serveur d'un fichier XML à partir de JavaScript/AJAX/Jquery et XSL (ce qui me semble être du délire complet d'autant plus que JavaScript ne fonctionne pas côté serveur !), d'autres semblent tout mettre (ou presque) dans la page HTML (ce qui ne me semble judicieux dans mon cas : plusieurs javascript de plusieurs dizaines de lignes).

    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 560
    Points : 21 622
    Points
    21 622
    Par défaut
    JavaScript ne peut pas écrire des fichiers côté client. Ce serait une lourde faille de sécurité.

    Tu pourrais faire quelque chose de similaire en mettant ton fichier XML dans un Web Storage, mais :

    - Encore faut-il que tes trucs acceptent d'aller chercher leur fichier XML là
    - Le Web Storage n'est finalement pas super géré par les navigateurs actuellement.

    Normalement ce genre de besoins on les stocke dans la session, côté serveur.

  3. #3
    Membre actif
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Points : 284
    Points
    284
    Par défaut
    merci pour la réponse.

    Je vais prendre une direction moins souple mais plus simple dans ce cas.

    voici une partie de mon .html :
    Code html : 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
    <html>
    	<head>
    		<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    		<title>Première carte avec OpenStreetMap</title>
    		<script type="text/javascript" src="OpenLayers-2.12/lib/OpenLayers.js"></script>
    		<link rel="stylesheet" href="carte.css" type="text/css">
    	</head>
    	<body onload="init()">
    		<div id="algo">
    		</div>
    		<div id="question">
    		</div>
    		<div id="legend">
    			<div id="legend_1">
    				<div id="legend_1_titre">
    				</div>
    				<div id="legend_1_choix">
    					<FORM NAME="legend_1">
    						<select name="choix_n1" onChange="init()">
    							<option value="choix1">Sans aléa</option>
    							<option value="choix2" selected="Selected">Dégradé de bleu</option>
    							<option value="choix3">Dégradé de rouge</option>
    							<option value="choix4">Couleurs du PPRI</option>
    							<option value="choix4">Couleurs de l'AZI</option>
    						</select>
    					</FORM>
    Il contient dans les dernière ligne la liste déroulante qui m'intéresse. Dans un .js externe, je voudrais récupérer la valeur de l'index :
    Code js : 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
    function init() {
    	var index = document.getElementById("legend_1_choix").legend_1.choix_n1.selectedIndex;
    	switch (index) {
    		case 1:
    			var SDL_choix = "http://localhost/SLD/SLD_alea_bleu.xml";
    			var val_opacity = 0;
    		break;
    		case 2:
    			var SDL_choix = "http://localhost/SLD/SLD_alea_bleu.xml";
    			var val_opacity = 0.5;
    		break;		
    		case 3:
    			var SDL_choix = "http://localhost/SLD/SLD_alea_rouge.xml";
    			var val_opacity = 0.5;
    		break;
    		case 4:
    			var SDL_choix = "http://localhost/SLD/SLD_alea_bleu.xml";
    			var val_opacity = 0.5;
    		break;
    		case 1:
    			var SDL_choix = "http://localhost/SLD/SLD_alea_bleu.xml";
    			var val_opacity = 0.5;
    		break;
    	};
    //code intermédiaire 
        var wms2 = new OpenLayers.Layer.WMS("alea", "http://localhost/cgi-bin/mapserv?map=/var/www/mapfile/alea_wms.map&", 
    		{layers: "alea_raster", 
    		transparent: true,
    		SLD: SDL_choix
    		},
    		{opacity: val_opacity
    		}
        );
    //code intermédiaire
        map.addLayer(wms2);
    mais firebug me renvoie une erreur précisant que document.getElementById("legend_1_choix").legend_1 n'est pas défini et je ne sais pas comment le faire dans un script externe. J'utilise deux tutoriels : un pour accéder à la div et l'autre pour enregistrer dans une variable le choix de la liste déroulante (le tuto met le script dans la page html, ce qui me dérange car mon .js fais déjà une 100aine de ligne et n'est pas fini).

    PRESQUE Résolu en utilisant getElementById("choix_n1") dans le .js et en remplaçant man par id dans mon <select>. Il ne me reste plus qu'a forcer la réactualisation de l'image quand on choisit ans la liste.

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 082
    Points : 44 687
    Points
    44 687
    Par défaut
    Bonjour,
    mets un ID sur ton select
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <select id="choix_1"  name="choix_n1" onChange="init()">
    et dans ton code tu récupéres par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var index = document.getElementById('choix_n1').value;
    Attention le retour est une STRING pas un NUMBER.

  5. #5
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    comme toujours je trouve qu'il est inutile d'en passer par une recherche d'id dans le dom
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input onchange="return init(this)">

    dans la fonction init
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function init(select) {
      var index = select.value
      var divLegend1Choix : select.parent.parent;
    ...
    }

    pas de recherche donc gain de perf et facilité d'écriture
    A+JYT

Discussions similaires

  1. [osCommerce] Modifier notifications aux clients
    Par skgz95 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/06/2008, 21h33
  2. Envoi de xml entre client et serveur
    Par metalcoyote dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2007, 21h50
  3. [Spring MVC] validation.xml coté client
    Par Tail dans le forum Spring Web
    Réponses: 1
    Dernier message: 28/10/2006, 17h46
  4. [Conseils] Modifier XML ?
    Par ghohm dans le forum Servlets/JSP
    Réponses: 10
    Dernier message: 12/09/2006, 16h24
  5. Comment créer un site dynamiquement modifiable par le client ?
    Par freija dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 03/07/2006, 18h24

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