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 :

Encodage URL dynamique avec des paramètres à valeurs multiples


Sujet :

JavaScript

  1. #1
    Membre éprouvé
    Avatar de lazarel
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2007
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2007
    Messages : 893
    Points : 1 164
    Points
    1 164
    Par défaut Encodage URL dynamique avec des paramètres à valeurs multiples
    Bonjour,


    Je souhaiterais mettre en place une fonction javascript qui soit capable de redéfinir l'URL dynamiquement dans le cas des paramètres à valeurs multiples.

    J'ai un formulaire dans lequel j'ai un select avec une sélection multiple de la forme suivante:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <form >
    <select name="state[]" multiple="multiple" size="5">
    <option value="e0">e0</option>
    <option value="e1">e1</option>
    <option value="e2">e2</option>
    <option value="e3">e3</option>
    </select>
    <br/>
    <input type="submit" value="Test"/>
    </form>

    Si je clique sur le bouton Test je retrouve dans mon URL la ligne suivante:
    Code URL : Sélectionner tout - Visualiser dans une fenêtre à part
    ?state=e0&state=e1&state=e2&state=e3&...
    Ce que je souhaite simplifier cette ligne de la façon suivante:
    Code URL simplifié : Sélectionner tout - Visualiser dans une fenêtre à part
    ?state=e0,e1,e2,e3&...
    Je sais comment récupérer le mon élément
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementsByName("state");
    Par contre je ne sais pas comment récupérer le tableau associé à cet élément et redéfinir l'URL dynamiquement une fois le formulaire validé.

    Je suis novice en Javascript, j'espère que quelqu'un pourra m'apporter son aide.

    Cordialement Lazarel

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    dans le cas d'une liste multiple, les différentes sélections sont envoyées au serveur, en POST, justement sous forme de liste séparée par des virgules.
    Il suffit peut être juste de changer la méthode de ton form, non ?
    (et peut être d'enlever les [] du name)

    A+

  3. #3
    Membre averti Avatar de htr999
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 331
    Points : 394
    Points
    394
    Par défaut
    tu pourrais ajouter les id à chaque champs option...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <form >
    <select name="state[]" multiple="multiple" size="5">
    <option id="e0" value="e0">e0</option>
    <option id="e1" value="e1">e1</option>
    <option id="e2" value="e2">e2</option>
    <option id="e3" value="e3">e3</option>
    </select>
    <br/>
    <input type="submit" value="Test" onclick="alert(document.getElementById('e1').selected);"/>
    </form>

  4. #4
    Membre averti Avatar de htr999
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 331
    Points : 394
    Points
    394
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Bonjour,
    dans le cas d'une liste multiple, les différentes sélections sont envoyées au serveur, en POST, justement sous forme de liste séparée par des virgules.
    Il suffit peut être juste de changer la méthode de ton form, non ?
    (et peut être d'enlever les [] du name)

    A+
    je pense qu'avec POST ou GET, la réponse transmise au serveur sera toujours par exemple de la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ...&state[]=e0&state[]=e3...
    donc si tu veux récupérer tous les choix, il me semblerait que ce soit nécessaire d'utiliser un tableau

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par htr999 Voir le message
    je pense qu'avec POST ou GET, la réponse transmise au serveur sera toujours par exemple de la form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ...&state[]=e0&state[]=e3...
    donc si tu veux récupérer tous les choix, il me semblerait que ce soit nécessaire d'utiliser un tableau
    Non (testé) !
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <select name="state" multiple>
    tu récupéreras "&state=e0,e3" par exemple.
    Ce fonctionnement est peut être dû aux [], justement (mais j'utilise pas cette syntaxe, visiblement liée à PHP) ...

    A+

  6. #6
    Membre averti Avatar de htr999
    Profil pro
    Étudiant
    Inscrit en
    Février 2008
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2008
    Messages : 331
    Points : 394
    Points
    394
    Par défaut
    ah ok au temps pour moi
    j'ai peut-être l'habitude avec les form en php

  7. #7
    Membre éprouvé
    Avatar de lazarel
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2007
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2007
    Messages : 893
    Points : 1 164
    Points
    1 164
    Par défaut
    Et bien,


    Merci toutes ces réponses . En fait l'idée est de pouvoir modifier l'URL avant que celle-ci soit envoyée au serveur.

    Dans mon cas, une fois le formulaire validé je fais appel à une servlet qui est chargée de me renvoyer un rendu html ou pdf pour faire du reporting avec BIRT.

    Comme parfois les paramètres utilisés sont longs et peuvent prendre plusieurs valeurs l'URL devient vite illisible. Je souhaite donc simplifier cette URL au maximum pour avoir quelque chose de plus propre.

    Peut être est ce plus clair maintenant

    Cordialement Lazarel

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Ben ... c'est plutôt moins clair
    Citation Envoyé par lazarel Voir le message
    Si je clique sur le bouton Test je retrouve dans mon URL la ligne suivante:
    Code URL : Sélectionner tout - Visualiser dans une fenêtre à part
    ?state=e0&state=e1&state=e2&state=e3&...
    Ce que je souhaite simplifier cette ligne de la façon suivante:
    Code URL simplifié : Sélectionner tout - Visualiser dans une fenêtre à part
    ?state=e0,e1,e2,e3&...
    La réponse est : si tu passes ton form en POST (cas par défaut), et que tu enlèves les crochets du name, tu auras ce résultat.
    As-tu essayé ?

    A+

  9. #9
    Membre éprouvé
    Avatar de lazarel
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2007
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2007
    Messages : 893
    Points : 1 164
    Points
    1 164
    Par défaut
    Re,

    Bon voilà j'ai suivi le conseil de E.Bzz et j'ai pu mettre au point ce que je souhaitais.

    D'abord le form
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <form id="myform" method="post" action="http://localhost/javascript/encodeURI.php">
    <select id="state" name="state" multiple="multiple" size="5">
    <option value="e0">e0</option>
    <option value="e1">e1</option>
    <option value="e2">e2</option>
    <option value="e3">e3</option>
    <option value="e4">e4</option>
    </select><br/>
    <input type="button" value="Test" onclick="myURI()"/>

    Ensuite la fonction myURI()
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function myURI(){
     
    var x = document.getElementById("myform");
    var t = document.getElementById("state");
    var tmp = new Array();
     
    for (var i=0; i < t.length; ++i){
      if (t.options[i].selected==true)
        tmp.push(t.options[i].text);
      }
    x.action += "?"+t.name+"="+tmp.join(",");
    x.submit();
    }

    Maintenant à la validation de mon formulaire j'ai l'URL suivante:
    Code URL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    http://localhost/javascript/encodeURI.php?state=e0,e1,e4
    Maintenant il me reste plus qu'à mettre en place une méthode générique lorsque que j'ai plusieurs champs

    Cordialement Lazarel

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut


    Tu as vérifié ce que tu récupères sur le serveur avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form id="myform" method="post" action="http://localhost/javascript/encodeURI.php">
    <select id="state" name="state" multiple="multiple" size="5">
    <option value="e0">e0</option>
    <option value="e1">e1</option>
    <option value="e2">e2</option>
    <option value="e3">e3</option>
    <option value="e4">e4</option>
    </select><br/>
    <input type="submit" value="Test"/>
    </form>
    Parce que encore une fois, le résultat devrait être le même (sans JS, et donc quelque soit le nombre de <select> du form) ...

    Loin de moi l'idée de vouloir insister

    A+

  11. #11
    Membre éprouvé
    Avatar de lazarel
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2007
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2007
    Messages : 893
    Points : 1 164
    Points
    1 164
    Par défaut
    Eh bien,


    Tu as raison d'insister car le résultat est le même

    J'avoue ne pas comprendre normalement la méthode POST est sensée caché les paramètres passés dans l'URL or ici ils sont visible

    Bon c'est pas grave au moins j'aurais pu en apprendre un peu plus sur javascript

    En tout cas merci E.Bzz

    Cordialement Lazarel

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/11/2010, 17h06
  2. Instanciation dynamique avec des paramètres
    Par MicroPuce dans le forum Langage
    Réponses: 2
    Dernier message: 12/12/2008, 14h44
  3. [CR11] faire un select avec des paramètres multiples
    Par Mr Strummer dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/07/2008, 17h04
  4. [SQL2K5] Procédure stockée avec paramètre à valeurs multiple
    Par Jinroh77 dans le forum Développement
    Réponses: 1
    Dernier message: 16/05/2008, 17h31
  5. url avec des paramètres
    Par babalastar dans le forum JSF
    Réponses: 2
    Dernier message: 25/01/2007, 09h47

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