Заполнить таблицу начальной загрузки данными из источника json

#javascript #jquery #json #bootstrap-4 #bootstrap-table

#javascript #jquery #json #bootstrap-4 #bootstrap-таблица

Вопрос:

Я новичок в работе с файлами начальной загрузки и json и столкнулся со следующей проблемой:

У меня есть следующий код:

 <div class="container">

  <h1 class="text text-success text-center ">Kontoauszug</h1>

  <table id="table" data-toggle="table" data-url="/json/data.json">
    <thead>
    <tr>
      <th data-field="auszug.betrag">ID</th>
      <th data-field="auszug.unix">Item Name</th>
      <th data-field="auszug.transaktionsart">Item Price</th>
    </tr>
    </thead>
  </table>

</div>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>

<link rel="stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<link rel="stylesheet" href= "https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.css">
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.18.0/dist/bootstrap-table.min.css">  

И json, с которым я работаю, имеет следующую структуру:

 {
  "auszug": {
    "1604400036082-3450": {
      "betrag": -367.5,
      "von/an_uuid": "Test1",
      "von/an": "Test1",
      "autorisiert-durch": "SYSTEM",
      "unix": 1604400036,
      "transaktionsart": "Lohnzahlung"
    },
    "1604406781759-8437": {
      "betrag": 85.17,
      "von/an": "Test2",
      "autorisiert-durch": "SYSTEM",
      "unix": 1604406782,
      "transaktionsart": "Überweisung"
    },
    "1604395596115-5983": {
      "betrag": 1226.48,
      "von/an": "Test3",
      "autorisiert-durch": "SYSTEM",
      "unix": 1604395596,
      "transaktionsart": "Überweisung"
    }
  },
  "kontonummer": "DEF05487151498683",
  "kontostand": 44641548.66,
  "success": true
}
  

Но когда я пытаюсь запустить код, я получаю «Не найдено совпадающих записей».
Как мне получить данные из json, подобные этому, в таблицу?

Заранее большое спасибо!

Редактировать: я не знаю, как точно получить responseText здесь, но вот скриншот console.log: console log responseText

Комментарии:

1. не могли бы вы показать свой javascript, как вы загружаете файл json?

2. Я понял, что с помощью bootstrap.table мне не нужно писать дополнительный javascript? Пожалуйста, поправьте меня, если я ошибаюсь 🙂 Я добавил srcs скрипта в фрагмент.

3. нет, вы правы, но вы уверены, что URL-адрес в порядке? файл затронут?

4. я думаю, что ваша структура файла json не очень хороша .. я не вижу []

5. Я думаю, что URL-адрес в порядке. Могу ли я проверить это в этой настройке? Я имею в виду, что обычно я бы использовал consolo.log()… Другое дело, что я не знаю, являются ли поля данных правильными. (Я думаю, мне нужно получить уровень глубже, не так ли?

Ответ №1:

Можно заметить, что вы не знаете ключ, потому что он динамический. Что вы можете сделать, это выполнить вызов ajax и получить данные в переменной. Теперь вам нужно сгладить ответ, чтобы вы могли передать плоский массив в таблицу начальной загрузки. Вместо использования атрибута data-url вы выполняете процесс, указанный в fiddle

Я добавил скрипку, которую вы можете использовать в качестве примера. Я также добавил соответствующий комментарий.

HTML

 <link href="https://unpkg.com/bootstrap-table@1.18.0/dist/bootstrap-table.min.css" rel="stylesheet">

<script src="https://unpkg.com/bootstrap-table@1.18.0/dist/bootstrap-table.min.js"></script>

<table id="table">
  <thead>
    <tr>
      <th data-field="betrag">betrag</th>
      <th data-field="autorisiert-durch">autorisiert-durch</th>
      <th data-field="unix">unix</th>
    </tr>
  </thead>
</table>
  

ваш скрипт должен быть

 <script>
var $table = $('#table')

  $(function() {
  
  // do an ajax call here to get the response. your response should be like responseData
  
  var responseData = {
    "1604400036082-3450": {
        "betrag": -367.5,
        "von/an_uuid": "asdqwe2413",
        "von/an": "Test1",
        "autorisiert-durch": "SYSTEM",
        "unix": 1604400036,
        "transaktionsart": "Überweisung"
        },
    "1604406781759-8437": {
        "betrag": 85.17,
        "von/an": "Test2",
        "autorisiert-durch": "SYSTEM",
        "unix": 1604406782,
        "transaktionsart": "Überweisung"
        },
    };
  
  var data = [];
  
  // Here you have to flat the array
  Object.keys(responseData).forEach(function(key){ 
  
  var value = responseData[key]; 
  data.push(value);
  })
    $table.bootstrapTable({data: data})
  })
  
  </script>
  

Дайте мне знать, если вам нужна ajax-версия этого кода.

скрипка http://jsfiddle.net/8ngoh4y1 /

Комментарии:

1. Было бы здорово, если бы я мог получить версию Ajax 🙂

2. Привет, спасибо тебе большое! Я попытался выполнить вызов Ajax, который вырезает «auszug» из ответа json, но я его не получил. Есть ли у вас какие-либо советы по этому поводу? Спасибо!

3. Можете ли вы опубликовать ответ, полученный после выполнения вызова ajax? Пока я отправляю ответ с помощью вызова ajax Json.

4. Я отредактировал json в своем вопросе, чтобы он был правильно отформатирован, также я приложил скриншот console.log. Уже большое вам спасибо 1

5. jsfiddle.net/hwnajc5f проверьте эту скрипку, у нее есть вызов json