如何使用 JSON 数据填充 <select> 并在单击时显示值?

Posted

技术标签:

【中文标题】如何使用 JSON 数据填充 <select> 并在单击时显示值?【英文标题】:How can I populate <select> with JSON data and display values when clicked? 【发布时间】:2020-07-24 09:40:36 【问题描述】:

我一直在尝试这样做,但我只能将数据填充到 htmlselect 中。

2 个问题。

第一季度。 我能够使用 AJAX 从 API 获取 JSON 数据。 (使用 AJAX 是因为我了解到它不需要浏览器刷新即可获取新数据):

    $(document).ready(function() 
  getDataJson();
);

function getDataJson(ajaxurl) 
  $.ajax(
    method: "GET",
    url: "https://corona.lmao.ninja/v2/jhucsse",  
    datatype: "json",
    success: onSuccess,
    error: onError
  );

接下来我尝试在我的 HTML 中填充 OnSuccess 上的选择:

function onSuccess(jsonReturn) 
  $("#dropdown").empty();

  //console.log(jsonReturn);

  let dropdown = $('#dropdown');

dropdown.empty();

dropdown.append('<option selected="true" disabled>Choose Country</option>');
dropdown.prop('selectedIndex', 0);


// Populate dropdown with list of countries

  $.each(jsonReturn, function (key, entry) 
    dropdown.append($('<option></option>').attr('value', entry.data).text(entry.data));
  );
  
  
    var $dropdown = $('#dropdown'),
        $objView = $('#objView'),
        $docFragment = $(document.createDocumentFragment());

for (var prop in jsonReturn) 
    $('<option/>', 
        val: prop,
        text: prop
    ).appendTo($docFragment);


$dropdown.append($docFragment);

$dropdown.on('change', function() 
    var objString = JSON.stringify(jsonReturn[$dropdown.val()]);

    objString = objString.replace(/[\\\[\]\"]*/ig, '');    // Remove unwanted chars
    objString = objString.replace(/\,/ig, '<br/>');         // Replace commas with new lines (i.e. br tags)

    $objView.html(objString);
);

$dropdown.trigger('change');     
    


//if JSON fails
function onError() 
  $("#dropdown").html("i failed.");

它奏效了。但随后我尝试执行我想做的下一步,即当我单击一个国家/地区的名称时,它应该显示其 JSON 数据的其余部分以及名称及其值。How to display JSON data on click with javascript 这不是确切的,但足够接近,但它是一个非常不同(困难?对我来说)我无法理解的解决方案。

目前我的下拉列表如下所示:JSFIDDLE

现在我打算这样做Populate HTML Table with Certain Items from a JSON Array

但每个国家/地区的所有其他 JSON 数据都是这样的How to display JSON data on click with JavaScript

如何解决剩下的脚本?

Q2.如何减少 AJAX 获取延迟?

即使数据较少,我也注意到了一点滞后/缓慢。还是只是正常现象?

【问题讨论】:

【参考方案1】:

第一季度的答案

首先,我准备了这3个变量,以使其更简单。

let jsonResponseContainer = []
let dropdown = $("#dropdown")
let objView = $("#objView")

然后在文件准备好时准备这个

$(document).ready(function() 
    // Initiate everything
    getDataJson();
  
    // Move dropdown change to standalone
    dropdown.on('change', function() 
        let chosenResponse = JSON.stringify(jsonResponseContainer[$("#dropdown").val()])
    
        // Remove unwanted chars
        chosenResponse = chosenResponse.replace(/[\\\[\]\"]*/ig, '');
        chosenResponse = chosenResponse.replace(/\,/ig, '<br/>');
    
        // Change objView
        objView.html(chosenResponse)
    )
);

你的 ajax 是

function getDataJson(ajaxurl) 
  $.ajax(
    method: "GET",
    url: "https://corona.lmao.ninja/v2/jhucsse", 
    datatype: "json",
    success: onSuccess,
    error: onError
  );

我做了一个函数来填充下拉列表

function populateDropdown(index, data)
    let newOption = "<option value=\"" + index + "\">" + data + "</option>"
    dropdown.append(newOption)

我所做的主要更改

function onSuccess(jsonReturn) 
// Populate container with ajax return directly
jsonResponseContainer = jsonReturn

// Do what you need to do
dropdown.empty();
dropdown.append('<option selected="true" disabled>Choose Country</option>');
dropdown.prop('selectedIndex', 0);

// Populate dropdown with list of countries
  $.each(jsonReturn, function (key, entry) 
    populateDropdown(key, entry.country);
  );

//if JSON fails
function onError() 
  $("#objView").html("i failed.");

请注意,我将jsonReturn 复制到另一个变量只是为了确保现在可以在任何地方访问数据。接下来是您的 on-change 侦听器被置于循环中,我将其移出循环。现在,我用字符串制作&lt;option&gt;(如果你愿意,你可以用片段改变它)。请注意,我使用键(jsonReturn 的数组键与jsonResponseContainer 相同)创建值。当 on-change 监听器被触发时,它只需要从数组中检索到&lt;pre&gt;

第二季度的答案

我不明白,我想这不是你的错。

注意:如果我使用了错误的语法,我深表歉意。

【讨论】:

以上是关于如何使用 JSON 数据填充 <select> 并在单击时显示值?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSON 数据填充 INPUT 和 SELECT

用户更改类别时自动填充表单时使用 JSON

如何使用我的数据库中的 select 语句转换/填充 List<JsTreeModel>?

填充json响应的下拉列表

模糊查询基于select遍历json文件自动填充的实现

如何使用 json 函数用数据库填充组合框?