调用biblia.api拉取数据填充select下拉框失败,哪里操作有误?
问题原因
- 你解析后的
books是接口返回的完整根对象,本身不是数组,没有length属性,所以你写的for循环根本不会执行。实际接口返回的所有圣经书卷数据存储在根对象的books数组字段中,需要先提取该字段再遍历。 - 你取的
books[i].passage字段不存在,单卷书的名称对应字段是name,书卷唯一标识对应字段是passageID,你可以根据需求选择赋值给option的文本和值。
修复后的完整代码
$(document).ready(function(){ let dropdown = document.getElementById('books'); dropdown.length = 0; let defaultOption = document.createElement('option'); defaultOption.text = '选择圣经书卷'; dropdown.add(defaultOption); dropdown.selectedIndex = 0; const url = 'https://api.biblia.com/v1/bible/contents/ASV?key=aa43781d7b806b8d6764191dce895e10'; const request = new XMLHttpRequest(); request.open('GET', url, true); request.onload = function() { if (request.status === 200) { // 先取完整响应对象,再提取books数组 const res = JSON.parse(request.responseText); const books = res.books; let option; for (let i = 0; i < books.length; i++) { option = document.createElement('option'); // 用name字段做显示文本,passageID做option值 option.text = books[i].name; option.value = books[i].passageID; dropdown.add(option); } } else { console.error('接口请求异常,状态码:' + request.status); } } request.onerror = function() { console.error('从 ' + url + ' 获取JSON数据时发生错误'); }; request.send(); });
内容的提问来源于stack exchange,提问作者lreystudios
相关产品推荐
相关产品推荐

