Создать динамический HTML и отображать в нем значения JSON - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть вызов 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>

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Чтобы сделать эту динамику, вы можете выполнить следующие шаги

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]

Примечание:

  1. Я добавил несколько полей для водителя и пассажира, вы должны пройти через это и настроить его по своему желанию.

  2. Вместо этого вам не нужно создавать статический HTMLВы можете сделать это из самого jquery.Так что вы можете иметь меньше кода.

Обновление:

Поскольку ОП хочет, как перебрать результат и исправить в нем данные.

Вот обновленная скрипта , которая выполняет итерацию динамически

Вот как это выглядит

[! [Output] [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 для данных для имитации вывода реального времени, подобного этому

Я также создал HTML динамически и заполнил только несколько полей.Вы также можете заполнить оставшиеся поля.

Надеюсь, это поможет вам.

0 голосов
/ 23 сентября 2018

Существует несколько способов заполнения данных JSON в HTML: Ajax, getJSON, Fetch, JavaScript (pure), 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>

Надеюсь, это поможет ...

0 голосов
/ 20 сентября 2018

Если я правильно понял, вы хотите заполнить каждую информацию. Поэтому для анализа с помощью 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...