【问题标题】:How to insert API response into HTML如何将 API 响应插入 HTML
【发布时间】:2022-05-01 22:34:04
【问题描述】:

我使用纯函数为多个 HTML 元素创建包装器,但不明白如何将 JSON 响应 API 数据插入其中。 您能否帮助创建一个将 API 数据插入 HTML 之类的纯函数(如文本)或使用名为“create”且具有属性“innerText”的现有函数。

我发现了类似的问题:Using Javascript loop to create multiple HTML elements

const create = (what, classAndId, text) => {
    let element = document.createElement(what);
    element.className = classAndId.class;
    element.id = classAndId.id;
    element.innerText = text;
    return element;
};

API:

const link = `http://api.apixu.com/v1/current.json?key=${key}&q=Kiev`;

const request = async () => {
  try {
    const response = await fetch(link);
    return await response.json();
  }catch (e) {
    throw new Error(e);
  }
};

API数据转换成可读格式的功能:

const parser = param => {
    return {
        name: param.location.name,
        region: param.location.country,
        time: param.location.localtime,
        temperature: {
            real: param.current.temp_c,
            feels_like: param.current.feelslike_c,
        },
        wind: {
            speed: param.current.wind_kph,
            direction: param.current.wind_dir,
        },
        pressure: param.current.pressure_mb,
        visibility: param.current.vis_km,
        precipitation: param.current.precip_mm,
        humidity: param.current.humidity,
    };
};

只在转换后将 API 数据渲染成 HTML 的异步函数:

async function showData() {
    const main = document.querySelector("#main");
    document.body.appendChild(main);
    main.innerHTML = JSON.stringify(parser(await request()));
}

渲染后的预期:
(来源:androidheadlines.com

预期为 HTML:

<div class="item">11:30 PM</div>
<div class="item">Mostly Cloud</div>
<div class="item">Thu Jun 13</div>

渲染功能:

{"name":"Kiev","region":"Ukraine","time":"2019-04-18 1:38","temperature":{"real":6,"feels_like":4.6},"wind":{"speed":6.8,"direction":"ENE"},"pressure":1028,"visibility":10,"precipitation":0,"humidity":70}

【问题讨论】:

  • 您想将 json 打印到页面或从 json 中提取值并将它们放入 html?
  • 我把它main.innerHTML = JSON.stringify(parser(await request())); 输出rejigged JSON,你希望它输出图片中的内容?您将如何从该数据中获取sun 图像?如果多云怎么办?还是晚上?其他一切都很简单
  • 也许你会想要使用param.current.condition.icon
  • 从json中提取值并将它们放入与图片相同的html中,而不是文本应该是:
    name
    湿度
    时间
  • 是的,你是对的,还有 param.current.condition, param.location.name - @JaromandaX

标签: javascript json api async-await pure-function


【解决方案1】:

您的 HTML 将不知道如何处理 json。您需要专门告诉您的 html 值是什么。例如:

async function showData() {
    const main = document.querySelector("#main");
    document.body.appendChild(main);
    const obj = parser(await request()); // <-- Assuming this works and it returns an object (not json)
    // Give your elements Id's to make it easier
    document.getElementById('time').innerText = obj.time;
    ...
}

如果我理解错了,而您只是想将实际的json 打印到网页上,那么您

async function showData() {
    const main = document.querySelector("#main");
    document.body.appendChild(main);
    const obj = parser(await request()); // <-- Assuming this works
    main.innerText = JSON.stringify(obj, null, 2);
}

如果您尝试将字符串化的 json 打印到页面,我还建议使用 pre 标签。

【讨论】:

  • 好吧,太棒了,但是如何使用 const obj = parser(await request()); 进入新的纯函数,例如 create 函数参数(whatRender,whereRender)并插入?
  • 我不知道你说的pure function是什么意思。但是,是的,在这里创建一个create 函数将是微不足道的。如果有帮助,请记得点赞。
  • 我的意思是我已经有了纯函数:const create = (what, classAndId, text) =&gt; { let element = document.createElement(what); element.className = classAndId.class; element.id = classAndId.id; element.innerText = text; return element; }; 可以这样:element.innerText = text; 渲染 obj.time。文本如何使用 obj.time?
猜你喜欢
  • 1970-01-01
  • 2015-01-19
  • 1970-01-01
  • 2021-10-30
  • 2020-05-24
  • 2019-07-08
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
相关资源
最近更新 更多