我已经用 JS 获取了一个 API,但输出看起来很糟糕,我不知道如何修复它 [关闭]

I have fetched an API with JS, but the output looks really bad and I don't know how to fix it [closed]

提问人:Cecilia R 提问时间:6/11/2023 最后编辑:mplungjanCecilia R 更新时间:6/11/2023 访问量:126

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将帮助其他人回答这个问题。

5个月前关闭。

我正在尝试使用 Javascript 获取 API,它正在工作,但我无法弄清楚如何使其可读。这是我的代码:

JS code

这是输出:

How it looks like

我已经用 ES6 做过几次了,但我不明白如何在原版中做到这一点。我猜是新手问题,但希望得到一些帮助。 提前致谢!

我试图添加JSON.stringify(data, null, 2);但这无济于事。我还尝试通过在数据后添加端点名称来获取一些端点,但随后没有任何显示。

javascript json fetch-api 字符串化

评论

0赞 NeERAJ TK 6/11/2023
你能添加最少的可重现代码和响应对象吗?另外,你能详细说明一下吗?I've done this with ES6 several times, but I don't understand how to do it in vanilla
0赞 Jaromanda X 6/11/2023
好吧,这就是字符串化的 JSON - 你的结果与你编码的完全一样
2赞 Liftoff 6/11/2023
呃......ES6 是普通的 javascript...
1赞 Noam 6/11/2023
1)请在帖子正文中包含代码和图像。2) ES6 本身就是普通的 JS,甚至不是那些新日子。3)输出看起来不错。它没有格式化,但 ES6 也不格式化 JSON。您可以寻找可以做到这一点的库。
0赞 Liftoff 6/11/2023
JSON.stringify(data, null, 2);是你要寻找的内置漂亮的打印机,但你必须将容器设置为具有,因为stringify的输出包括而不是.white-space: pre\n<br>

答:

-1赞 Ashar Khan 6/11/2023 #1
function fetchData() {
  fetch(URL)
    .then(response => response.json())
    .then(data => {
      const dataContainer = document.getElementById('dataContainer');
      // Extracting and displaying specific data
      data.forEach(item => {
        const headline = item.headline;
        const paragraph = item.paragraph;
        const itemElement = document.createElement('div');
        itemElement.innerHTML = `<h2>${headline}</h2><p>${paragraph}</p>`;
        dataContainer.appendChild(itemElement);
      });
    })
    .catch(error => {
      console.error('Error:', error);
    });
}

fetchData();

假定 API 响应数据是一个对象数组。data.forEach() 方法用于遍历数组中的每个对象。在循环中,将从每个对象中提取标题和段落属性。

为每个项目创建一个新的 div 元素,并使用模板文本设置其内容以包含提取的数据。这将创建一个结构化的 HTML 标记,其中标题作为 h2 元素,段落作为 p 元素。

最后,新创建的 div 元素将追加到网页上的 dataContainer 元素中,该元素将单独显示每个项目。

评论

0赞 Cecilia R 6/12/2023
谢谢你,它现在正在工作,你拯救了我的一天!
-1赞 mplungjan 6/11/2023 #2

您需要解析和提取位。

例如,像这样

const data = [{"vignette":"","order":"1","imageUrl":"","headlinePrefix":"JUST NU: ","headline":"Polisanmäler — timmar innan match","paragraphPrefix":"","paragraph":"AIK agerar efter nya avgångskrave t"},{"vignette":"#v-826f4b23-1df4-42c4-b20f-75 1aaa520117","order":"2","imageUrl":"https://static.cdn-expressen.se/images/8f/d7/8fd7fe0e7cf3 4cd9aaef1d47c34369e1/16x6/1280.png","head linePrefix":"","headline":"Elias sköts ihjäl i Farsta: \"Han var bara ett barn\"","paragraphPrefix":"","paragraph":"15-åringens familj fick tvätta bort hans blod. \"Bråkade inte med någon\""}, {"vignette":"","order":"3","imageUrl":"https://stati c.cdn-expressen.se/images/54/b6/54b6560a8d ef4b889b4d6ab12652be80/16x6/[email protected] g","headlinePrefix":"","headline":"Fattar ingenting efter fruns sms - mitt i tv-sändningen","para graphPrefix":"","paragraph":"Alexander Axén om orden som skapade panik: \"Skrev att hon slåss\""}]


document.getElementById('dataContainer').innerHTML = data
  .map(item => `<h2><b>${item.headlinePrefix || ""}</b> ${item.headline}</h2>
<p>${item.paragraph}</p>`).join('<hr/>')
<div id="dataContainer"></div>