Создайте таблицу html, используя объект JSON - PullRequest
0 голосов
/ 22 апреля 2020

Я знаю, что есть много подобных вопросов. Этот код - Франкенштейн многих других вопросов переполнения стека. Но я так близок, что просто не понимаю код, который пытался использовать примеры очень хорошо. Вот моя html страница:

<!DOCTYPE html>
<html>
    <script src="Scripts.js"></script> 
    <script>


    </script>
<head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"> </script>

</head>

<body>

    <p id="demo"></p>


    <script>

      obj.Blades.forEach(element => {
          var name = element.Name + " " + element.Damage;
          document.write(name + "<br >");
      });
    </script>

<input type="button" value="Generate Table" onclick="makeTable()" />
<hr />
<div id="dvTable"></div>

</body>
</html>

А вот Java Страница сценария:


var jsonStuff = '{ "Blades" : [' +
'{ "Name":"Longsword" , "Damage":"l2d" },' +
'{ "Name":"Dagger" , "Damage":"l3d" },' +
'{ "Name":"Mace" , "Damage":"l4d" },' +
'{ "Name":"Spear" , "Damage":"l5d" } ]}'; 


var obj = JSON.parse(jsonStuff);

function makeTable(){
  //Create a HTML Table element.
  var table = document.createElement("TABLE");
  table.border = "1"

 //Get the count of columns.
 var columnCount = Object.keys(obj.Blades).length;

 //Add the header row.
 var row = table.insertRow(-1);
   for (var i = 0; i < columnCount; i++) {
       var headerCell = document.createElement("TH");
       headerCell.innerHTML = obj.Blades[i].Name;
       row.appendChild(headerCell);
   }

    //Add the data rows.
    for (var i = 1; i < obj.Blades.length; i++) {

       row = table.insertRow(-1);
       for (var j = 0; j < columnCount; j++) {
           console.log(obj.Blades[j].Damage);
           var cell = row.insertCell(-1);
           cell.innerHTML = obj.Blades[i][j];
       }
   }

   var dvTable = document.getElementById("dvTable");
   dvTable.innerHTML = "";
   dvTable.appendChild(table);
}

Вот как это выглядит сейчас:

enter image description here

Итак, я знаю, что проблема должна быть где-то в разделе JavaScript с комментариями «добавить строки данных». Я только сейчас уверен, как go об этом.

1 Ответ

1 голос
/ 22 апреля 2020

Я считаю, что ваша проблема со строкой:

cell.innerHTML = obj.Blades[i][j];

Вы ссылаетесь на Blades, как если бы это был двумерный массив, хотя на самом деле это массив объектов. Вам нужно иметь что-то подобное, чтобы избежать неопределенности:

cell.innerHTML = obj.Blades[i].Name;
cell.innerHTML = obj.Blades[i].Damage;
...