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 :

Remplir un tableau html avec le résultat [JSON] d'une requête ajax


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Par défaut Remplir un tableau html avec le résultat [JSON] d'une requête ajax
    Bonjour à tous,
    Je viens de débuter JQuery et je cherche à remplir un tableau html avec le résultat (format json) d'une requete ajax. J'essaie avec une boucle for mais à la fin j'obtiens uniquement le dernier élément du résultat json alors que j'aurais voulu qu'il m'affiche les uns après les autres dans le tableau. Merci par avance ! Voici mon bout de code
    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
    var index = 0;
    $(document).ready(function(){
        console.log("ready !")
        $.ajax({
                type: "GET", //rest Type
                dataType: 'json', //mispelled
                url: "http://localhost:8080/v1/log/student/blondelt",
                async: true,
                contentType: "application/json; charset=utf-8",
                success: function (msg) {
                     for(var index=0; index<msg.length;index++){
                           $("#username").html(msg[index].username);
                           $("#exercise").html(msg[index].exercise);
                           $("#computer").html(msg[index].computer);
                           $("#content").html(msg[index].content);
                      }
                }
          });
     })
    Et le code html du tableau
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <table class="table table-striped" id="display">
                <tr>
                    <th>Username</th>
                    <th>Exercise</th>
                    <th>Machine</th>            
                    <th>Contenu</th>
                </tr>
                <td id = "username">username</td>
                <td id = "exercise">exercise</td>
                <td id = "computer">computer</td>
                <td id = "content">content</td>
            </table>

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Les id doivent être uniques dans une structure html...Et il manque une ballise <tr> autour de tes <td>. Il faut récréer les tableaux en javascript.
    Enfin bon si c'est juste pour afficher un tableau basique c'est souvent plus facile de créer le tableau en php et de renvoyer directement du html plutôt qu'un tableau json.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2016
    Messages
    225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2016
    Messages : 225
    Par défaut
    Bonjour,

    deux trois petits trucs en passant.

    Ton indentation est immonde, et même si le wysiwyg de dvp.com est lui même une horreur (tab de 4 espaces ? autant vomir), c'est primodial que tu fasses un effort sur ce point, pour ta propre lecture et re lecture du code, mais aussi pour toutes les autres personnes qui viendraient à le lire.

    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
    var index = 0;
    $(document).ready(function(){
    	console.log("ready !")
    	$.ajax({
    		type: "GET", //rest Type
        		dataType: 'json', //mispelled
        		url: "http://localhost:8080/v1/log/student/blondelt",
        		async: true,
        		contentType: "application/json; charset=utf-8",
        		success: function (msg) {
    		        for(var index=0; index<msg.length;index++){
    		            $("#username").html(msg[index].username);
    		            $("#exercise").html(msg[index].exercise);
    		            $("#computer").html(msg[index].computer);
    		            $("#content").html(msg[index].content);
    		        }
    		}
    	});
    })
    En javascript, il est fortement recommandé de ne pas utiliser for( ...) pour itérer sur un tableau, je te laisses le soin de chercher par toi même les mutliples raisons à cela.

    On utilisera plutôt la méthode forEach de Array, à défaut, jquery fournit une alternative compatible pour tous les navigateurs, notes que la signature est légèrement différente, encore une fois je t'invites à lire les docs,

    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
    $(document).ready(function(){
    	console.log("ready !")
    	$.ajax({
    		type: "GET", //rest Type
    		dataType: 'json', //mispelled
    		url: "http://localhost:8080/v1/log/student/blondelt",
    		async: true,
    		contentType: "application/json; charset=utf-8",
    		success: function (msg) {
    			msg.forEach(function (m/*, index*/){
    			    $("#username").html(m.username);
    			    $("#exercise").html(m.exercise);
    			    $("#computer").html(m.computer);
    			    $("#content").html(m.content);
    			})
    		}
    	});
    })
    Comme sus cité, la structure de ton tableau HTML est incorrecte, Il devrait ressembler à cela :

    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
    <table class="table table-striped" id="display">
      <thead>
        <tr>
          <th>Username</th>
          <th>Exercise</th>
          <th>Machine</th>            
          <th>Contenu</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td id = "username">username</td>
          <td id = "exercise">exercise</td>
          <td id = "computer">computer</td>
          <td id = "content">content</td>
        </tr>
      </tbody>
    </table>

    Pour afficher tous les éléments de `msg`, il te faut :
    - créer une ligne `tr` de tableau par élément dans `msg`,
    - construire les cellules de cette ligne avec les valeurs textes que tu souhaites y afficher,
    - et finalement, ajouter celle nouvelle ligne au tableau HTML existant.

    Donc la boucle sur msg doit être ré écrite,
    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
    $(document).ready(function(){
    	console.log("ready !")
    	$.ajax({
    		type: "GET", //rest Type
    		dataType: 'json', //mispelled
    		url: "http://localhost:8080/v1/log/student/blondelt",
    		async: true,
    		contentType: "application/json; charset=utf-8",
    		success: function (msg) {
    			msg.forEach(function (m/*, index */){
    				var ligne = $("<tr></tr>");
    				ligne.append($("<td>" + m.username + "</td>"));
    				ligne.append($("<td>" + m.exercise + "</td>"));
    				ligne.append($("<td>" + m.computer + "</td>"));
    				ligne.append($("<td>" + m.content + "</td>"));
    				$("tbody").append(ligne);
    			})
    		}
    	});
    })
    Pour finir, il faut corriger le HTMl qui ne reflète plus le nouveau code,

    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
    <table class="table table-striped" id="display">
      <thead>
        <tr>
          <th>Username</th>
          <th>Exercise</th>
          <th>Machine</th>            
          <th>Contenu</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>username</td>
          <td>exercise</td>
          <td>computer</td>
          <td>content</td>
        </tr>
      </tbody>
    </table>

    Le code fournit nécessite encore des changements, cependant dans le cadre de ce post c'est suffisant, et je crois, que tu trouveras et corrigeras par toi même les petits problèmes que j'y ai laissé.

    a+

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Par défaut
    Bonjour,
    Autant désolé pour la mauvaise lisibilité du code (faute d'indentation); je l'ai édité et je pense que c'est mieux qu'avant meme si c'est pas encore parfait. Et merci pour les reponses ça m'a permit de resoudre mon problème. Il a juste fallu que je supprime le contenu de la balise <tbody> pour éviter d'avoir deux entetes vu qu'il (ledit contenu) est créer dans le code jquery. Merci à tous !

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2017
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 14
    Par défaut
    j'ai essayé votre code mais ça marche pas pourriez vous m'aider svp ?!!!

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

Discussions similaires

  1. [AJAX] Récupérer les clés d'un json après une requête ajax
    Par Nico_SAS dans le forum jQuery
    Réponses: 4
    Dernier message: 25/06/2014, 14h18
  2. Réponses: 1
    Dernier message: 09/04/2013, 10h46
  3. [Prototype] Parser du JSON aprés une requête Ajax
    Par Gregory.M dans le forum Bibliothèques & Frameworks
    Réponses: 18
    Dernier message: 16/06/2010, 10h21
  4. [XSLT] aide pour faire un tableau HTML avec fusion de lignes
    Par utwor dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 02/01/2006, 21h41
  5. [VB6] recuperer des valeurs ds un tableau html avec vb!!
    Par leo13 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 11/12/2004, 13h02

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