javascript - 如何将本地json文件渲染为HTML和浏览器

标签 javascript html json

我对 Javascript 还很陌生,但遇到了问题。目前我正在开发一个项目,这实际上是我的实践项目,我正在尝试制作购物车页面。我的问题是 JSON 文件,我不知道如何呈现它(在浏览器中的 HTML 中显示它),我有一些产品的本地 JSON 文件。这是我的主页代码、app.js(其中是我的 JSON 文件函数)和带有产品的 JSON 文件

HTML 文件

<!DOCTYPE html>

<html lang="en">

<head>
  <title>Shopping Cart</title>

  <meta charset="utf-8" />
  <meta name="description" content="cobe" />
  <meta name="author" content="cobe" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <link rel="stylesheet" href="../style/style.css" />
</head>

<body>
  <main class="main-wrapper">

    <div class="items">
      <div class="item">
        <div class="image">
          <img src="" alt="" class="img">Image</img>
        </div>
        <h2 class="item-name">Name of item</h2>
        <h3 class="price">Price</h3>
        <button class="button">Add item</button>
      </div>
      <div id="products" class="list"></div>
    </div>
</main>

  <script type="text/javascript" src="../products.json"></script>
  <script type="text/javascript" src="../app.js"></script>

app.js 文件

let xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function () {
  if (this.readyState == 4 && this.status == 200) {
    let response = JSON.parse(xhttp.responseText);
    let products = response.products;

    let output = '';
    for (let i = 0; i < products.length; i++) {
      output += '<li>' + products[i].name + '</li>';
    }
    document.getElementById('products').innerHTML = output;
  }
};
xhttp.open("GET", "products.json", true);
xhttp.send();

和名为 products.json 的 JSON 文件

{
  "products": [
    {
      "id": 1,
      "name": "Eggs",
      "image": "https://d17zv3ray5yxvp.cloudfront.net/variants/W1ymDizfe679XsfX9uP8A5bU/7b27a910a7194c812eacf34700e38dcab3abed02f30837d1dad313c5651bb5fa",
      "price": {
        "amount": 7.99,
        "currency": "Kn",
        "measureUnit": "Kom"
      }
    },
    {
      "id": 2,
      "image": "https://d17zv3ray5yxvp.cloudfront.net/variants/b1qEMnNGbwiwV5cWysofPoqz/7b27a910a7194c812eacf34700e38dcab3abed02f30837d1dad313c5651bb5fa",
      "name": "Milk",
      "price": {
        "amount": 4.99,
        "currency": "Kn",
        "measureUnit": "Kom"
      }
    },
    {
      "id": 3,
      "image": "https://d17zv3ray5yxvp.cloudfront.net/variants/1avpwnxKAEqEpTf1k3VCbBbg/7b27a910a7194c812eacf34700e38dcab3abed02f30837d1dad313c5651bb5fa",
      "name": "Cheese",
      "price": {
        "amount": 44.99,
        "currency": "Kn",
        "measureUnit": "Kg"
      }
    }
  ]
}

所以我的问题是我应该在 HTML 文件中写什么,这样我就可以将 JSON 文件中的产品名称放入我的 div 中,该 div 是在 HTML 文件中声明的名称,或者我是否缺少更多 JS 函数?目前我的页面是空白的,因为我无法解决如何从 JSON 文件获取所有内容。

HTML 文件位于views 文件夹中,app.js 和products.json 位于views 文件夹之外。

谢谢!

最佳答案

尝试使用函数生成模板并设置innerHTML属性。

从 API 获得响应 JSON 后,您就可以使用此 populateProducts 函数。这将生成模板并更新 DOM。

var myData = {
  "products": [
    {
      "id": 1,
      "name": "Eggs",
      "image": "https://d17zv3ray5yxvp.cloudfront.net/variants/W1ymDizfe679XsfX9uP8A5bU/7b27a910a7194c812eacf34700e38dcab3abed02f30837d1dad313c5651bb5fa",
      "price": {
        "amount": 7.99,
        "currency": "Kn",
        "measureUnit": "Kom"
      }
    },
    {
      "id": 2,
      "image": "https://d17zv3ray5yxvp.cloudfront.net/variants/b1qEMnNGbwiwV5cWysofPoqz/7b27a910a7194c812eacf34700e38dcab3abed02f30837d1dad313c5651bb5fa",
      "name": "Milk",
      "price": {
        "amount": 4.99,
        "currency": "Kn",
        "measureUnit": "Kom"
      }
    },
    {
      "id": 3,
      "image": "https://d17zv3ray5yxvp.cloudfront.net/variants/1avpwnxKAEqEpTf1k3VCbBbg/7b27a910a7194c812eacf34700e38dcab3abed02f30837d1dad313c5651bb5fa",
      "name": "Cheese",
      "price": {
        "amount": 44.99,
        "currency": "Kn",
        "measureUnit": "Kg"
      }
    }
  ]
};

function populateProducts() {
  var template = '';
  for(let index = 0; index < myData.products.length; index++) {
    template += 
    "<div>Name: " + myData.products[index].name + "</div>" + 
    "<div>Image: <img class='my-image' src='" + myData.products[index].image + "' /></div>"+
    "<div>Amount: " + myData.products[index].price.amount + "</div>" + 
    "<div>Currency: " + myData.products[index].price.currency + "</div>" + 
    "<div>MeasureUnit: " + myData.products[index].price.measureUnit + "</div>";
  }
  document.getElementById('item-wrapper').innerHTML = template;
}

populateProducts();
.my-image {
  max-width: 50px;
}
<main class="main-wrapper">
  <div id="item-wrapper"></div>
</main>

关于javascript - 如何将本地json文件渲染为HTML和浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58954613/

相关文章:

javascript - node.js socket.io 无法发送到特定客户端

html - Bootstrap 3 : Label on top on field and submit button in a form inline

javascript - 强制 History.js 使用哈希 URL 回退

json - 如何以更简洁的方式将 JSON 格式的请求从 R 中的 URL 获取 JSON 数据发送到 data.frame 中?

jQuery。如何执行从 JSON 加载的脚本?

json - 如何将从服务接收到的数据传递到 Angular 数据表

javascript - 在 Handlebars [object Object] 错误中访问 JSON 对象

javascript - 占位符不更新选项值

javascript - 如何正确链接调用 $.show() 和 $.toggleClass() 来触发 CSS3 动画

html - 将 'margin: 0px auto' 应用于 body 元素不起作用