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 :

[JQuery] Sérialiser l'envoi des valeurs d'un select box multiple


Sujet :

jQuery

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 30
    Points
    30
    Par défaut [JQuery] Sérialiser l'envoi des valeurs d'un select box multiple
    Bonjour à tous

    J'ai un soucis dans l'utilisation de JQuery pour Ajax : le soucis du débutant !
    J'aimerais envoyer à un fichier PHP via les propriétés d'Ajax les valeurs des options que j'ai sélectionné dans un select box (id = "select_box").

    En Javascript, j'en arrive donc à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var array = new Array();
    $("#select_box option:selected").each(function(){
    	array.push($(this).val());
    });
    var post = {tab: array};
     
    $("#area").load("fichier.php", post);
    Là où je bloque c'est dans la création de la variable objet "post", elle n'est pas correctement sérialisée puisque dans "fichier.php", la valeur de $_POST["tab"] n'est pas un tableau mais uniquement la dernière valeur de ce tableau.
    J'ai beau cherché sur la toile, je n'ai trouvé aucun exemple de code avec les select multiple !

    Quelqu'un saurait me donner la solution ? Est-ce que je m'y prends de la mauvaise façon ?

    Merci pour votre aide !

  2. #2
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    http://docs.jquery.com/Ajax/serialize ?

    Edit : Tiens d'ailleurs non, t'es pas censé sérializer l'objet, mais plutôt envoyer une hashmap de clée valeur

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Oui désolé, effectivement c'est un abus de langage : par sérialiser je voulais plutôt dire "former"... Comment générer cet objet qui s'apparente à un hashmap ?

  4. #4
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    336
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 336
    Points : 374
    Points
    374
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    var datas = {};
    $("#select_box option:selected").each(function(index,element){
    	datas[element.name] = $(element).val();
    });
     
    $("#area").load("fichier.php", datas{});
    Faudrait m'expliquer l'intéret de passer index en première paramètre du callback, et pourquoi diable Jquery n'étant pas les élements matchés

    Bref, sinon ça marche

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    Ca semble être ça, merci !
    Il y a juste la dernière ligne qui renvoie une erreur, il faut enlever les incolades à "datas{}" dans la fonction "load".

    Mais il reste encore un détail : ce n'est pas "element.name" qu'il me faudrait mais bel et bien l'ID ou le nom de la select box (je devrais mettre datas["nom_du_select"] par exemple) car au final, je voudrais que mon fichier PHP reçoive une variable POST de type array : $_POST["nom_du_select"] doit donc être un type array de PHP.
    Si je fais "datas['nom_du_select'] = x" à chaque itération, je n'aurais qu'une seule valeur (la dernière de l'itération donc) et non un tableau de valeurs...

    "index" équivaut-il à la position de l'élément dans la collection (un peu comme serait "i" dans for(i = 0; ...) etc.) ?
    edit : Apparemment oui ... Pas très utile pour les instructions type "foreach" mais quand même...

    PS : J'imagine que tu as peut-être eu des sources pour l'apprentissage de JQuery et de ce cas précis ; viennent-elles du net ? J'ai eu beau chercher avec l'ami Google je n'avais rien trouvé.

    Merci encore !

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 30
    Points
    30
    Par défaut
    J'ai apparemment trouvé la solution, tout simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    var post = new Array();
    $("#select_box option:selected").each(function(){
    	post.push($(this).val());
    });
     
    $("#area").load("page.php", {"select_box[]": post});
    Dans ma page PHP j'obtiens bien une variable $_POST["select_box"] de type array contenant l'ensemble des valeurs sélectionnées. Par contre on est assez loin de la philosophie JQuery à savoir avoir du code "léger" (c'est relatif certes )... N'y a-t-il pas une manière plus simple ? Une fonction JQuery zappée ?

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

Discussions similaires

  1. Formview envois des valeur null à l'insertion
    Par ftpcrazy dans le forum ASP.NET
    Réponses: 3
    Dernier message: 26/10/2009, 11h43
  2. [MySQL] Sélection d'une ligne et envoi des valeurs au formulaire
    Par yaboki dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/08/2009, 14h59
  3. Select multiple qui envoi des valeurs différents
    Par novasenha dans le forum Langage
    Réponses: 5
    Dernier message: 14/05/2009, 19h27
  4. Réponses: 0
    Dernier message: 11/03/2009, 12h23
  5. Réponses: 45
    Dernier message: 07/07/2006, 15h08

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