Flask JavaScript Jquery将Json数据放入表中?

3htmauhk  于 2023-06-22  发布在  jQuery
关注(0)|答案(1)|浏览(135)

所以我来管理弗拉斯克到目前为止,我已经能够用JavaScript获取我的Python脚本的输出(它以JSON格式返回股票和价格)。
现在我尝试使用jQuery将这些JSON数据转换为HTML表格。不幸的是,我不是最好的JavaScript。我通常喜欢尽可能多地使用Python,但我需要一些帮助才能实现这个结果。
prices端点返回json如下:

[{'0.1': '1387'}, {'0.1': '6060'}, {'0.2': '7000']}

对于最终的结果,我想用jquery将这些信息显示到一个表中,所以这个表只在我们有数据之后才出现。同样对于重复的价格,我想把库存加在一起,就像这样:

Price | Stock
0.1   | 7447
0.2   | 7000

我的代码:

{% extends "_base.html" %}
{% block content %}
{% if current_user.is_authenticated %}
<h3 class="text-center">Welcome {{current_user.email}}! {{current_user.balance}}</h3>
{% else %}
<h3 class="text-center">Price List</h3>
{% endif %}
<br>
<div class="form-group">
  <form action="" method="post">
  <div class="input-group mb-3-center" style="display: flex;justify-content: center;">
      <div class="input-group-prepend">
      <label for="inputsm">Country</label>
      <br>
      <select class="selectpicker" data-live-search="true" id="country" onchange="update()">
        <option value="select">Select a country...</option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
      </select>
      <br>
      <br>
      <label for="inputsm">Service</label>
      <br>
      <select class="selectpicker" data-live-search="true" id="service" onchange="update()">
        <option value="select">Select a service...</option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
      </select>
      <br>
      <br>
      <label for="inputsm">Price</label>
      <span class="input-group-text" style="font-size: medium;">$</span>
      <br>
      <label for="inputsm">Stock</label>
      <span class="input-group-text" style="font-size: medium;">-</span>
      <br>
    </div>
  </div>
  </form>
  </div>
  <div id="table">
    <table>
        <tbody>
            <th>Price</th>
            <th>Stock</th>
        </tbody>
    </table>
</div>
  <script>
    function update() {
    const countrySelect = document.getElementById('country').value;
    const serviceSelect = document.getElementById('service').value;
    if (countrySelect != 'select' && serviceSelect != 'select') {
      async function logJSONData(service,country) {
          const settings = {
              method: 'POST',
              headers: {
                  'Content-Type': 'application/json',
              }
          };
          const response = await fetch("http://localhost/prices?service="+service+"&country="+country, settings);
          const jsonData = await response.json();
          console.log(jsonData);
      }
      logJSONData(serviceSelect,countrySelect);
      
      $(table).find('tbody').append("<tr><td>jsonData</td></tr>");
    }
  }
    </script>
{% endblock %}
m528fe3b

m528fe3b1#

要使用jQuery在HTML表中显示JSON数据,您可以使用以下方法:
将一个空的<table>元素添加到HTML文件中您希望表格显示的位置:

<table id="priceTable">
  <thead>
    <tr>
      <th>Price</th>
      <th>Stock</th>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

现在,您可以使用jQuery获取JSON数据并动态填充表。在<script>标签中添加以下JavaScript代码:

<script>
  $(document).ready(function() {
    // Fetch the JSON data using jQuery's AJAX method
    $.ajax({
      url: '/prices', // Replace with the appropriate URL for your Flask endpoint
      method: 'GET',
      dataType: 'json',
      success: function(data) {
        // Process the received JSON data and populate the table
        var tableBody = $('#priceTable tbody');
        var prices = {};

        // Calculate the total stock for each unique price
        data.forEach(function(item) {
          var price = Object.keys(item)[0];
          var stock = parseInt(item[price]);

          if (prices.hasOwnProperty(price)) {
            prices[price] += stock;
          } else {
            prices[price] = stock;
          }
        });

        // Populate the table with the calculated prices and stocks
        Object.keys(prices).forEach(function(price) {
          var stock = prices[price];
          var row = '<tr><td>' + price + '</td><td>' + stock + '</td></tr>';
          tableBody.append(row);
        });
      },
      error: function() {
        console.error('Failed to fetch price data.');
      }
    });
  });
</script>

确保将 AJAX URL中的'/prices'替换为与返回JSON数据的Flask端点相对应的适当URL。
使用此代码,当页面加载时,jQuery脚本将从指定的URL获取JSON数据。然后,它将计算每个唯一价格的总库存,并相应地用价格和库存填充<table>
注意:确保Flask端点/prices以正确的格式返回JSON数据,如示例所示。

相关问题