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 :

Accès aux données avec Json (liste de tableaux)


Sujet :

jQuery

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Points : 68
    Points
    68
    Par défaut Accès aux données avec Json (liste de tableaux)
    Bonjour à tous,

    Je n'arrive pas à résoudre un problème que j'ai avec l'extraction de données dans une source Json avec Jquery.
    J'accède parfaitement à mon tableau fields, mais lorsque je souhaite faire un data[fields[i].name], cela ne me retourne rien...
    Quelqu'un a t'il une idée d'une solution pour ce problème ?

    Source Json :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {"os":
    [{"id":"1","value":"AIX"},{"id":"2","value":"HP-UX"},{"id":"3","value":"Linux"},{"id":"4","value":"Solaris"},{"id":"5","value":"Windows"},{"id":"6","value":"Autre"}],
    "priority":
    [{"id":"1","icon":"priority_blocker.gif","value":"Urgent"},{"id":"3","icon":"priority_major.gif","value":"Normal"},{"id":"4","icon":"priority_minor.gif","value":"Low"}],
    "security":
    [{"id":"1","value":"Aucune"},{"id":"2","value":"value1"},{"id":"3","value":"value2"},{"id":"4","value":"Support"}],
    "fields":
    [{"hidden":false,"name":"priority","required":true,"type":"selectImg"},{"hidden":false,"name":"security","required":true,"type":"select"},{"hidden":false,"name":"os","required":true,"type":"select"},{"hidden":false,"name":"component","required":false,"type":"input"},{"hidden":false,"name":"summary","required":true,"type":"input"},{"hidden":false,"name":"description","required":true,"type":"textarea"},{"hidden":false,"name":"attachment","required":false,"type":"file"},{"hidden":false,"name":"duedate","required":false,"type":"input"}]}
    Mon traitement Jquery.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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    $.ajax({
          type: "POST",
          url: portletContextURL,
          data: {productId:$('#product').val(), issueTypeId:$('#issueType').val()},
          dataType: 'json',
          cache: false,
          success: function(data){
        	  // Parcours des champs.
        	  var myFields = data['fields'];
        	  for(var i = 0 ; i < myFields.length ; i++){
        		  if(myFields[i].type == 'selectImg' || myFields[i].type == 'select'){
        			  // On vide le composant.
        			  $('#'+myFields[i].name).children().remove();
    ----------> Mon problème est ici :
        			  var mySelectField = data[myFields[i].name];
        			  // Parcours des valeurs et affichage de celles-ci.
        			  for(var y = 0 ; y < mySelectField.length ; y++){
        				  if('#'+myFields[i].type == 'select'){
        					  $('#'+myFields[i].name).append($('<option></option>').attr('value',mySelectField[y].id).text(mySelectField[y].value));
        				  }else if('#'+myFields[i].type == 'selectImg'){
        					  $('#'+myFields[i].name).append($('<option></option>').attr('value',mySelectField[y].id).attr('title',portletContextRoot+'/img/'+mySelectField[y].icon).text(mySelectField[y].value));
        				  }
        			  }
        			  // Si le champs est obligatoire, on ajoute la classe de contrôle.
        			  if(myFields[i].required){
        				  $('#'+myFields[i].name).addClass('notNull');
        			  }else{
        				  $('#'+myFields[i].name).removeClass('notNull');
        			  }
        			  /*
        			   * Si le champs n'est pas caché, on recharge le dropdownlist
        			   * et on affiche le bloc correspondant.
        			   * */ 
        			  if(!myFields[i].hidden){
        				  $('#'+myFields[i].name).msDropDown().data('dd');
    	    	    	  $('#'+myFields[i].name+'Bloc').show();
        			  }
        		  }else{
        			  // Si le champs est obligatoire, on ajoute la classe de contrôle.
        			  if(myFields[i].required){
        				  $('#'+myFields[i].name).addClass('notNull');
        			  }else{
        				  $('#'+myFields[i].name).removeClass('notNull');
        			  }
        			  // Si le champs n'est pas caché, on recharge le dropdownlist.
        			  if(!myFields[i].hidden){
    	    	    	  $('#'+myFields[i].name+'Bloc').show();
        			  }
        		  }
        		  // Affichage du bouton d'action.
        		  $('#actionBloc').show();
        	  }
          }
    });
    Grosso-modo, en fonction du type de champs, j'affiche le composant HTML et je souhaite récupérer les valeurs des selects.

    Merci pour votre aide.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    il semblerait que tu fasses une erreur de raisonnement
    Si l'on prend la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var myFields = data['fields'];
    myFields vaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var myFields = data['fields'] =
    /* tableau en memoire */
    [
      {"hidden":false, "name":"priority",   "required":true,  "type":"selectImg"},
      {"hidden":false, "name":"security",   "required":true,  "type":"select"},
      {"hidden":false, "name":"os",         "required":true,  "type":"select"},
      {"hidden":false, "name":"component",  "required":false, "type":"input"},
      {"hidden":false, "name":"summary",    "required":true,  "type":"input"},
      {"hidden":false, "name":"description","required":true,  "type":"textarea"},
      {"hidden":false, "name":"attachment", "required":false, "type":"file"},
      {"hidden":false, "name":"duedate",    "required":false, "type":"input"}
    ]
    maintenant quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var mySelectField = data[myFields[i].name];
    tu vas obtenir successivement :
    pour i = 0 -> "priority"
    pour i = 1 -> "security"
    pour i = 2 -> "os"
     ...etc...
    pour i = 7 -> "duedate"
    mySelectField est une String

    donc quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(var y = 0 ; y < mySelectField.length ; y++)
    mySelectField.length vaut
    pour i = 0 -> 8
    pour i = 1 -> 8
    pour i = 2 -> 2
     ...etc...
    pour i = 7 -> 7
    donc cela fini par planter car visiblement tu ne pointes pas sur le tableau que tu souhaites...

    peut être cherches tu à accéder aux données contenues dans data[mySelectField] soit en fait data[ data['fields'][i].name].

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 115
    Points : 68
    Points
    68
    Par défaut
    Bonjour,

    Merci pour ta réponse, mais en fait mon raisonnement était juste et mon erreur venait d'ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if('#'+myFields[i].type == 'select'){
      $('#'+myFields[i].name).append($('<option></option>').attr('value',mySelectField[y].id).text(mySelectField[y].value));
    }else if('#'+myFields[i].type == 'selectImg'){
       $('#'+myFields[i].name).append($('<option></option>').attr('value',mySelectField[y].id).attr('title',portletContextRoot+'/img/'+mySelectField[y].icon).text(mySelectField[y].value));
    }
    Voilà, une erreur toute bête qui m'a fait perdre un temps fou.

    Merci encore pour ta participation.

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

Discussions similaires

  1. L'accès aux données avec Qt
    Par Alain Defrance dans le forum Bases de données
    Réponses: 7
    Dernier message: 18/09/2009, 15h56
  2. vitesse d'accès aux données avec une jointure
    Par Invité dans le forum SQLite
    Réponses: 1
    Dernier message: 01/07/2009, 00h46
  3. Gérer l'accès aux données avec un Bindingsource
    Par soso78 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 22/04/2009, 23h23
  4. [AJAX] Acces aux données avec ajax dans une fonction javascript
    Par Sidi-Bou dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/03/2008, 12h04
  5. Problème d'acces aux données d'une liste Chainée
    Par Le Payton dans le forum Langage
    Réponses: 4
    Dernier message: 27/08/2007, 11h00

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