【问题标题】:How to create select dropdown in javaScript with fetched data from api如何使用从 api 获取的数据在 javaScript 中创建选择下拉列表
【发布时间】:2023-03-03 00:04:01
【问题描述】:

在此代码中,我无法创建选择选项。获取 API 后,数据应显示为选择下拉列表的选项,并且此 for loop 未执行。

const batchTrack = document.getElementById("#batchSelect");
console.log(batchTrack);
const getPost = async () => {
const response = await fetch("http://eltp-coditas.cloudjiffy.net/batch/");
console.log(response);
const data = response.json();
return data;
};

const displayOption = async () => {
const options = await getPost();
for (option of Object.keys(options)) {
const newOption = document.createElement("option");
console.log(option);
newOption.value = option;
newOption.text = option.name;
batchTrack.appendChild(newOption);
}
};
displayOption();

【问题讨论】:

  • 请格式化您的代码sn-p。
  • for 循环中的 console.log() 根本不打印吗?你能检查一下 console.log(options) 是否打印出你期望的结果吗?

标签: javascript html for-loop async-await fetch-api


【解决方案1】:
  1. 删除document.getElementById("#batchSelect");中的#
  2. await response.json(); 添加等待,因为json() 是一个异步函数。

全部修复后,它应该可以工作。

以下示例

const batchTrack = document.getElementById("batchSelect");
console.log({ batchTrack });
const getPost = async () => {
  const response = await fetch("http://eltp-coditas.cloudjiffy.net/batch/");
  const data = await response.json();
  console.log({ data });
  return data;
};

const displayOption = async () => {
  const options = await getPost();
  for (option of options.data) {
    const newOption = document.createElement("option");
    newOption.value = option.batchName;
    newOption.text = option.batchName;
    batchTrack.appendChild(newOption);
  }
};

displayOption();
<select id="batchSelect"></select>

【讨论】:

    【解决方案2】:

    您的代码中有几个错误:

    • getElementById("#batchSelect"); 在这个函数中你不需要使用#
    • 您的响应对象具有包含数组的data 属性。所以你可以循环遍历数据数组。
    • 在您的回复中,对象没有名为name 的属性,而是batchName

    HTML:

    <select id="batchSelect"></select>
    

    脚本块:

    const batchTrack = document.getElementById("batchSelect");
    const getPost = async () => {
        const response = await fetch("http://eltp-coditas.cloudjiffy.net/batch/");
        console.log(response);
        const data = response.json();
        return data;
    };
    
        const displayOption = async () => {
            const options = await getPost();
            options.data.forEach(option => {
        
                const newOption = document.createElement("option");
                console.log(option);
                newOption.value = option.batchName;
                newOption.text = option.batchName;
                batchTrack.appendChild(newOption);
        
            });
        };
        displayOption();
    

    【讨论】:

      【解决方案3】:

      这对你有帮助。试试这个URL

          let dropdown = document.getElementById('locality-dropdown');
      dropdown.length = 0;
      
      let defaultOption = document.createElement('option');
      defaultOption.text = 'Choose State/Province';
      
      dropdown.add(defaultOption);
      dropdown.selectedIndex = 0;
      
      const url = 'https://api.myjson.com/bins/7xq2x';
      
          fetch(url)  
            .then(  
              function(response) {  
                if (response.status !== 200) {  
                  console.warn('Looks like there was a problem. Status Code: ', 
                    response.status);  
                  return;  
                }
          
                // Examine the text in the response  
                response.json().then(function(data) {  
                  let option;
              
                  for (let i = 0; i < data.length; i++) {
                    option = document.createElement('option');
                    option.text = data[i].name;
                    option.value = data[i].abbreviation;
                    dropdown.add(option);
                  }    
                });  
              }  
            )  
            .catch(function(err) {  
              console.error('Fetch Error -', err);  
            });
      

      【讨论】:

      • 请在此处添加相关代码。该链接将来可能会断开,使其变得无关紧要,对以后会进来的人没有用处。
      • 您可以发表评论。
      • 立即查看。那样可以么? @TusharShahi
      • 是的。添加更多详细信息,说明您认为这会起作用的原因。这将帮助任何面临这个问题的人。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 2021-03-02
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多