创建动态 html 并在其中显示 json 值

Posted

技术标签:

【中文标题】创建动态 html 并在其中显示 json 值【英文标题】:Create dynamic html & display json values in it 【发布时间】:2019-02-24 09:45:32 【问题描述】:

我有调用 ajax api 调用,我得到 json 格式的响应。我想用 html 元素在屏幕上显示每个值。我已经实现了这一点,但它不会根据我的需要创建动态设计。如果没有响应数据,我也想显示一条消息(“无可用数据”)。这是我的工作 HTML 和 JSON 示例。 需要显示如下

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="col-md-12">
    <div class="portlet light bg-inverse tripcontainer">
        <div id="container">
            <div class="col-md-4 driver">
                <div>
                    <label class="header">Driver Details</label>
                </div>
                <div>
                    <label>Name:</label>
                    <span class="dname"></span>
                </div>
                <div>
                    <label>Vehicle No:</label>
                    <span class="dvehicle"></span>
                </div>
                <div>
                    <label>Mobile No:</label>
                    <span class="dmob"></span>
                </div>
                <div>
                    <label>Email:</label>
                    <span class="demail"></span>
                </div>
                <div>
                    <label>Start Location:</label>
                    <span class="dstart"></span>
                </div>
                <div>
                    <label>Lat:</label>
                    <span class="dlat"></span>
                </div>
                <div>
                    <label>Long:</label>
                    <span class="dlong"></span>
                </div>
                <div>
                    <label>End Location:</label>
                    <span class="dend"></span>
                </div>
                <div>
                    <label>Lat:</label>
                    <span class="dselat"></span>
                </div>
                <div>
                    <label>Long:</label>
                    <span class="dselong"></span>
                </div>
                <div>
                    <label>Booked Seats:</label>
                    <span class="dseat"></span>
                </div>
                <div>
                    <label>Start Time:</label>
                    <span class="dstarttime"></span>
                </div>
                <div>
                    <label>Route ID:</label>
                    <span class="droute"></span>
                </div>
                <div>
                    <label>Distance:</label>
                    <span class="ddistance"></span>KM</div>
            </div>
            <div class="col-md-8 passanger">
                <div>
                    <label class="header">Passanger Details</label>
                </div>
                <div>
                    <label>Name:</label>
                    <span class="pname"></span>
                </div>
                <div>
                    <label>Mobile No:</label>
                    <span class="pmob"></span>
                </div>
                <div>
                    <label>Email:</label>
                    <span class="pemail"></span>
                </div>
                <div>
                    <label>Start Location:</label>
                    <span class="pstart"></span>
                </div>
                <div>
                    <label>Lat:</label>
                    <span class="pslat"></span>
                </div>
                <div>
                    <label>Long:</label>
                    <span class="pelong"></span>
                </div>
                <div>
                    <label>End Location:</label>
                    <span class="pend"></span>
                </div>
                <div>
                    <label>Lat:</label>
                    <span class="pelat"></span>
                </div>
                <div>
                    <label>Long:</label>
                    <span class="pelong"></span>
                </div>
                <div>
                    <label>Booked Seats:</label>
                    <span class="pseat"></span>
                </div>
                <div>
                    <label>Start Time:</label>
                    <span class="pstarttie"></span>
                </div>
                <div>
                    <label>End Time:</label>
                    <span class="pendtime"></span>
                </div>
                <div>
                    <label>Distance:</label>
                    <span class="pdistance"></span>KM</div>
            </div>
        </div>
    </div>
</div>

【问题讨论】:

那么您面临的问题是什么? 你能粘贴预期的结果吗? 我的问题更新了,请看一下 我不明白你为什么先创建一个空的“容器”,然后用你的 ajax 调用填充它。您不能在 ajax 调用中创建和填充所有内容吗?我认为也许它更简单。 @ReSendano 我不能,你能帮忙吗? 【参考方案1】:

如果我理解得很好,你想填写每个信息 所以用javascript解析你可以这样做:

var parsedResponse = JSON.parse(ajaxesponse);
if(parsedResponse.length = 0)
   console.log('No data');
else
   var keys = Object.keys(parsedResponse[0]);
   //parsedResponse[0] for driver data
   for(var i = 0; i < keys.length ; i++)
      //The best thing to do is to change your class name and name it the same way as your keys in the response object
      $("."+keys[i]).html(parsedResponse[0][keys[i]]);
   

还有你的 html : 而不是

<div>
   <label>Email:</label>
   <span class="demail"></span>
</div>

你有类似的东西

<div>
   <label>Email:</label>
   <span class="email"></span>
</div>

【讨论】:

请检查更新的 json 格式小提琴jsfiddle.net/eLpcybk2/22 我不太了解【参考方案2】:

有几种方法可以在 HTML 中填充 JSON 数据,即 Ajax、getJSON、Fetch、JavaScript(纯)、XMLHttpRequest。

下面是一个使用 fetch() 方法的示例。您可以根据自己的需要进行修改:

<div>
    <table>
        <tbody id="my-list">
            <tr>
                <th>Field 01</th>
                <th>Field 02</th>
                <th>Field 03</th>
                <th>Field 04</th>
                <th>Field 05</th>
            </tr>
        </tbody>
    </table>
</div>


<script>

$(function () 
    const url = 'https://jsonplaceholder.typicode.com/todos';
    fetch(url,  /* other parameters */ )
        .then(resp => resp.json())
        .then(data =>  // Your code for handling the data you get from the API
            renderData(data);
        )
        .catch(function (error)  // This is where you run code if the server returns any errors
            console.log('There has been a problem with your fetch operation: ', error.message);
        );
);


function renderList(data) 
    var list = "";
    $.each(data, function (index) 
        href = "https://jsonplaceholder.typicode.com/todos?id=" + data[index].Id;
        list += "<tr>";
        list += "<td>" + data[index].Field01 + "</td>";
        list += "<td>" + data[index].Field02 + "</td>";
        list += "<td>" + data[index].Field03 + "</td>";
        list += "<td>" + data[index].Field04 + "</td>";
        list += "<td>" + data[index].Field05 + "</td>";
        list += "</tr>";
    )
    $("#my-list").append(list);


</script>

希望这会有所帮助...

【讨论】:

【参考方案3】:

要使这种动态化,您可以按照以下步骤操作

1.像这样为驱动程序分配值

$('.dname').html(driver_data[0].employeename);

2。像这样为乘客赋值

$('.pname').html(driver_data[0].passenger_data[0].employeename);

3.遍历你的结果(这应该是第一个)

for (i = 0; i < result.length; i++)  
// your assignments here

这里我已经解析并附加了这个 fiddle

中的值

这是添加后的样子

[![在此处输入图片描述][2]][2]

注意:

    我为司机和乘客附加了几个字段,您应该遍历它并使其适合您的愿望。

    您不需要创建静态 HTML,而是可以从 jquery 本身执行此操作。这样你就可以有更少的代码。

更新:

因为 OP 想要如何遍历结果并修复其中的数据。

这是动态迭代的updated fiddle

看起来是这样的

[![输出][4]][4]

$(document).ready(function() 
    $.get("http://www.mocky.io/v2/5ba349e82f000054009685b0", function(data, status) 
        var output = '';
        for (i = 0; i < data.length; i++) 
            var driverHtml = '<div class="col-md-4 driver"><div><label class="header">Driver Details</label></div><div><label>Name:</label><span class="dname">' + data[i].employeename + '</span></div>';
            var passengerHtml = '<div class="col-md-8 passenger"><div><label class="header">Passenger Details</label></div><div><label>Name:</label><span class="pname">' + data[i].passenger_data[0].employeename + '</span></div><hr>';
            output += driverHtml + passengerHtml;
        
        $('#container').html(output);
    );
);

更新说明:

我使用Mocky作为数据来模拟real time output like this

我也动态地创建了 HTML 并且只填充了几个字段。您也可以填写其余字段。

希望对你有所帮助。

【讨论】:

我听不懂,请解释一下 3.遍历你的结果,它将如何给出我需要的结构 好吧,我会遍历结果并为你解析它 您的 html 中有很多字段,我只会为驾驶员和乘客的 3 个字段执行此操作。你可以自己填写其他细节可以吗? 我已经更新了我的答案。这是动态迭代的小提琴jsfiddle.net/qrxbu2vo/19

以上是关于创建动态 html 并在其中显示 json 值的主要内容,如果未能解决你的问题,请参考以下文章

我如何从 json 中取出值并在 NSLog 中显示它们

显示动态 HTML 表单元素,其中包含具有订单配置的数组对象

在 ASP.NET 中动态创建 XML(内存)并在浏览器中显示

无法在 TableView 中显示解析的 JSON 列表

如何从对象类型中动态获取值并在扩展面板角材料中实现?

从 json 获取容器尺寸并在 css 样式标签中显示值