2017-10-17 3 views
0

Je tente de remplir une table vide avec des données renvoyées à partir de la requête Ajax. La table remplit à l'intérieur des colonnes correctes, mais toutes les données de données sont regroupées (dans une longue chaîne) et toutes les données de taux d'intérêt sont regroupées (dans une chaîne longue). Malgré cela, la ligne Console.log() fonctionne parfaitement et montre chaque élément, énuméré, le tout sur des lignes séparées.Ajout de jQuery au tableau HTML

Mon code est ci-dessous:

HTML

<table id="table" border="1"> 
    <tr> 
     <th>Date</th> 
     <th>Value</th> 
    </tr> 
    <tr> 
     <td id='col1'></td> 
     <td id='col2'></td> 
    </tr> 
    </table> 

Javascript/jQuery

$.getJSON("api", function(data) { 
    for (var x =1; x <= data.count -1 ; x++){ 
     $("#col1").append(data.observations[x].date); 
     $("#col2").append(data.observations[x].value); 
     console.log(x, data.observations[x].date, data.observations[x].value); 
     } 
}) 

Comment puis-je réécris pour que chaque date et le taux d'intérêt est sur une ligne séparée. Exemple: ligne1: date1 et valeur1, ligne2: date2 et valeur2, etc.

P.S. La réponse devrait inclure $.getJSON(api, data) et NON inclus $.parseJSON(data) ou $.each(data)) ou success: function (data))

+0

Vous devez créer des lignes et des cellules ... ajouter les cellules aux lignes, ajouter les lignes à la table. Ce que vous faites maintenant est d'ajouter le texte à une seule cellule. – theGleep

+0

Cela se produit parce que vous ajoutez les données comme 2 longues chaînes à '# col1' et' # col2', vous devez boucler et pour chaque cellule ajouter un '' et pour chaque ligne '' ou au moins ajouter un '
' après chaque "cellule" –

+0

Duplication possible de [Utilisation de jQuery pour construire des lignes de table à partir de la réponse Ajax (Json)] (https://stackoverflow.com/questions/17724017/using-jquery-to-build-table -rows-from-ajax-response-json) – adiga

Répondre

2

Essayez de générer dynamiquement une nouvelle <tr> ligne pour chaque résultat dans votre table. L'exemple ci-dessous vous donnera également des identifiants uniques pour chaque nouvelle colonne <td>dynamiquement ajoutée par ex. col-1, col-2 etc.

var i = 1; 
 
var j = 2; 
 

 
for(i=1; i<=10; i++) 
 
{ 
 
    $("#table").append("<tr><td id='col-" + i + "'>" + "col-" + i + "</td><td id='col-" + j + "'>" + "col-" + j + "</td></tr>"); 
 
    
 
    i++; 
 
    j = j+2; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table id="table" border="1"> 
 
    <tr> 
 
    <th>Date</th> 
 
    <th>Value</th> 
 
    </tr> 
 
</table>

Et votre script serait quelque chose comme:

$.getJSON("api", function(data) 
{ 
    var x = 1; 
    var z = 2; 

    for (x =1; x <= data.count -1 ; x++){ 
     $("#table").append("<tr><td id='col" + x + "'>" + data.observations[x].date + "</td><td id='col" + z + "'>" + data.observations[x].value + "</td></tr>"); 

     x++; 
     z = z+2; 
     } 
}); 
+0

Il va créer beaucoup d'élément avec le même ID, ID doit être unique – RafH

+0

Bon alors vous pouvez incrémenter l'ID en utilisant la boucle for. Je mets à jour la réponse. –

2

$.getJSON("api", function(data) { 
 
    var $table = $("#table") 
 
     
 
    for (var x =1; x <= data.count -1 ; x++){ 
 
     var $row = $("<tr>"), 
 
     dateCell = $("td").text(data.observations[x].date), 
 
     valueCell = $("td").text(data.observations[x].value) 
 
     $row.append(dateCell).append($valueCell) 
 
     $table.append($row) 
 
     
 
     console.log(x, data.observations[x].date, data.observations[x].value); 
 
     } 
 
})
<table id="table" border="1"> 
 
    <tr> 
 
     <th>Date</th> 
 
     <th>Value</th> 
 
    </tr> 
 
    <tr> 
 
     <td id='col1'></td> 
 
     <td id='col2'></td> 
 
    </tr> 
 
    </table>

(depuis que je n'ai pas accès t o votre API, ceci est complètement non testé)

+0

Pourquoi y a-t-il un signe dollar à côté de valueCell? Est-ce une faute de frappe? – user3062459

+0

Non - juste un standard que j'utilise pour indiquer que j'ai affaire à un objet jQuery au lieu d'un objet DOM. – theGleep

0

voici ma méthode, faites un modèle et remplacez ensuite les variables par les valeurs, j'ai commenté les lignes principales et fait une démonstration de maquette.

//$.getJSON("api", function(data) { 
 
var data = [1,2,3,4]; 
 
    for (var x of data){ 
 
     //var html = `<tr><td>$1</td><td>$2</td></tr>`.replace('$1', data.observations[x].date).replace('$2', data.observations[x].value); 
 
     var html = `<tr><td>$1</td><td>$2</td></tr>`.replace('$1', 1).replace('$2', 2); 
 
     $('#table').append(html); 
 
     //console.log(x, data.observations[x].date, data.observations[x].value); 
 
     } 
 
//})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table id="table" border="1"> 
 
    <tr> 
 
     <th>Date</th> 
 
     <th>Value</th> 
 
    </tr> 
 
    </table>

0

une rangée et Append cellules pour chaque enregistrements:

for (var x=0 ; x<data.count ; x++){ 
    var obs = data.observations[x]; 
    $('<tr/>').append(
    $("<td/>").text(obs.date), 
    $("<td/>").text(obs.value) 
).appendTo("#table") 
} 
2

est ici une solution avec un fichier JSON de l'échantillon.

JS Fiddle DEMO

Code HTML:

<table id="table" border="1"> 
    <thead> 
     <tr> 
      <th>Date</th> 
      <th>Value</th> 
     </tr> 
    </thead> 
    <tbody> 

    </tbody> 
    </table> 

JS:

onSuccess: function (response) { 
      response.forEach(function(row) { 
     $('table#table tbody').append("<tr class='tablerow'><td class='col1'>"+row.date+"</td><td class='col2'>"+row.value+"</td></tr>"); 
     }); 
    } 

Vous pouvez devoir changer la table HTML ainsi (c.-à séparer l'en-tête et le corps par thead et tbody).Le code ci-dessus ajoute des lignes en fonction de la longueur de la réponse. J'espère que cela t'aides.