【问题标题】:Display a <select> with information from an API in?显示一个带有来自 API 的信息的 <select>?
【发布时间】:2021-12-03 05:38:23
【问题描述】:

我正在尝试弄清楚如何在选择中显示来自 API 的信息。

用户必须选择一个自身链接到 api 的起始站。但我无法在我的选择中创建包含每个电台名称的选项。

你能帮我理解我的错误吗?

<section class="container">
  <div class="item">
  <p>list</p>
  <select id="subwaystation"> 
  </select>

var apiStations = "https://api-ratp.pierre-grimaud.fr/v4/stations/metros/8";

function req1() {
fetch(apiStations, {
  method: "get"
})
  .then(response => response.json())
  .then(data => {
   let allstations= data.result.stations;
    for(var i = 0; i < allstations.length; i++) {
      html += "<option value=" + key  + ">" +obj[key] + "</option>"
  }
  document.getElementById("subwaystation").innerHTML = html;
  })
}
req1();

【问题讨论】:

    标签: javascript html json api


    【解决方案1】:

    您的代码包含一些简单的错误,您应该能够在浏览器的控制台中看到这些错误,这将为您提供有关它为什么不工作的线索。

    首先你会看到html 在你尝试追加之前没有定义。你不能附加到不存在的东西上。

    如果你解决了这个问题,你会看到keyobj 也没有定义。目前尚不清楚您期望这些来自何处或您认为它们将包含什么。我想知道您是否只是简单地复制并粘贴了一些您找到的代码,而没有停下来正确检查它或考虑它是否适合您将其粘贴到的上下文。

    您可以通过以下方式非常直接地解决这些问题

    1. 在循环开始之前将html 声明为空字符串,因此+= 可以附加一些内容
    1. 在创建&lt;option时,引用循环当前索引(i)处的站对象,然后在该对象中找到的特定属性(slugname,如原始图所示JSON),而不是使用keyobj,它们不是来自代码中的其他任何地方。

    演示:

    var apiStations = "https://api-ratp.pierre-grimaud.fr/v4/stations/metros/8";
    
    function req1() {
      fetch(apiStations, {
          method: "get"
        })
        .then(response => response.json())
        .then(data => {
          let allstations = data.result.stations;
          let html = '';
          for (var i = 0; i < allstations.length; i++) {
            html += "<option value=" + allstations[i].slug + ">" + allstations[i].name + "</option>"
          }
          document.getElementById("subwaystation").innerHTML = html;
        })
    }
    req1();
    <select id="subwaystation">
    </select>

    【讨论】:

    • 谢谢你,我尝试了很多东西,但我离正确答案不远。如果你不介意,我需要发出声音。我可以显示 api 消息,但是当我选择另一个站时如何更改消息:api-ratp.pierre-grimaud.fr/v4/schedules/metros/8/balard/A,因为每条消息都会因所选站而异。我想不出一个解决方案,当我选择我的电台时,会显示正确的消息(在本例中为 Balard)。
    • 嗨。这听起来像是一个单独的问题,或者至少是您项目的下一部分。您应该首先mark this answer as accepted,因为它解决了您上面提出的问题,然后按照网站的正确问答结构开始一个新帖子来提出您的新问题 - 这样整个社区都可以看到并回答您的问题,其他人将来也可以寻找答案。这不是一个讨论论坛,因此您无法通过不断请求新帮助来无限扩展现有问题。谢谢。
    猜你喜欢
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    相关资源
    最近更新 更多