首页 > 解决方案 > 使用 HTML 调用 API 数组处理的 Javascript

问题描述

我正在调用一个 BUS ETA api,它将返回一个带有 ETA 和路线信息的 json。示例如下。我设法让第一个数组以 HTML 显示,但第二个[1]和第三个没有成功[2]。我设法通过 console.log 查看所有三个 ETA,但不会以 HTML 格式显示。

任何的想法?

更新:创建了一个 jsFiddle 示例。

https://jsfiddle.net/21tk38b9/

BUS ETA API 样本数据

{
  "type": "ETA",
  "version": "1.0",
  "generated_timestamp": "2021-06-29T16:02:53+08:00",
  "data": [
    {
      "co": "KMB",
      "route": "978",
      "dir": "I",
      "service_type": 1,
      "seq": 7,
      "dest_tc": "粉嶺(華明)",
      "dest_sc": "粉岭(华明)",
      "dest_en": "FANLING (WAH MING)",
      "eta_seq": 1,
      "eta": "2021-06-29T16:11:24+08:00",
      "rmk_tc": "",
      "rmk_sc": "",
      "rmk_en": "",
      "data_timestamp": "2021-06-29T16:02:41+08:00"
    },
    {
      "co": "KMB",
      "route": "978",
      "dir": "I",
      "service_type": 1,
      "seq": 7,
      "dest_tc": "粉嶺(華明)",
      "dest_sc": "粉岭(华明)",
      "dest_en": "FANLING (WAH MING)",
      "eta_seq": 2,
      "eta": "2021-06-29T16:28:15+08:00",
      "rmk_tc": "原定班次",
      "rmk_sc": "原定班次",
      "rmk_en": "Scheduled Bus",
      "data_timestamp": "2021-06-29T16:02:41+08:00"
    },
    {
      "co": "KMB",
      "route": "978",
      "dir": "I",
      "service_type": 1,
      "seq": 7,
      "dest_tc": "粉嶺(華明)",
      "dest_sc": "粉岭(华明)",
      "dest_en": "FANLING (WAH MING)",
      "eta_seq": 3,
      "eta": "2021-06-29T16:43:15+08:00",
      "rmk_tc": "原定班次",
      "rmk_sc": "原定班次",
      "rmk_en": "Scheduled Bus",
      "data_timestamp": "2021-06-29T16:02:41+08:00"
    }
  ]
}

HTML

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Mining Status</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="/src/js/Untitled-4.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="/src/css/main.css">
<link rel="stylesheet" href="/src/css/15.css">
<style type="text/css">
.fullscreen {
               position: fixed; 
    overflow-y:fixed;
    width: 100%;
}

</style>


</head>

<div id="wrap">


<body>
<div style="    
font-size: 100px;
text-align: center;">
<div id="rmk"></div>

<table class="table">
  <thead>
    <tr>
      <th scope="col">#</th>
      <th scope="col">Route</th>
      <th scope="col">ETA</th>
      <th scope="col">Remark</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">1</th>
      <td><div id="route"></div></td>
      <td><div id="but"></div>
      </td>
      <td></td>
    </tr>
    <tr>
      <th scope="row">2</th>
      <td></td>
      <td><div id="but"></div>
      <td></td>
    </tr>
    <tr>
      <th scope="row">3</th>
      <td></td>
      <td></td>
      <td></td>
    </tr>
  </tbody>
</table>




</body>
    </div>

</html>

Javascript

function repeat57() {
$(function() {
$.ajax({
type: "GET",
url: "https://data.etabus.gov.hk/v1/transport/kmb/eta/83B717529F9794BC/978/1",
dataType: "json",
success: function (data) {
        console.log(typeof data); // -- Object
        var json = data;
                for (var i = 0; i < json.data.length; i++) {
                    var str = json.data[i].eta
                if (str !== null ) {
                    str = str.split("T").pop();
                    str2 = str.split("+",1).pop();
                    str3 = str2.replace(/:/g,'');
                    d = new Date();
                    datetext = d.toTimeString();
                    datetext = datetext.split(' ')[0];
                    datetext = datetext.replace(/:/g,'');
                    console.log(datetext)
                var eta = str3 - datetext;

                console.log(eta)

                 var eta2 = "[ " + eta.toString().slice(0, -2) +" mins,]";
                } else {
                    var remark = json.data[i].rmk_tc
                    eta2 = remark;
                }
                console.log(typeof str)
        $('#but').html(eta2);
                $('#rmk').html(remark);
            }
}
});
});
setTimeout(repeat57, 19000);
}
repeat57();


function repeat58() {
    $(function() {
    $.ajax({
    type: "GET",
    url: "https://data.etabus.gov.hk/v1/transport/kmb/eta/83B717529F9794BC/978/1",
    dataType: "json",
    success: function (data) {
                    var json = data;
                    console.log(typeof .json)
                    for (var i = 0; i < json.data.length; i++) {
                        var str = JSON.parse(json.data[i].route)
                    if (str !== null ) {
                    
                    } else {
                        var remark = json.data[i].rmk_tc
                        str = remark;
                    }
                    console.log(typeof str)
                    $('#route').html(str);
                }
    }
    });
    });
    setTimeout(repeat58, 19000);
    }
    repeat58();
    
    

标签: javascriptjquery

解决方案


您想要动态还是总是只有 3 个条目?如果有三个条目,您可以执行以下操作:

HTML 代码:

<head>
  <meta charset="utf-8">
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>

  <div id="rmk"></div>

  <table class="table">
    <thead>
      <tr>
        <th scope="col">#</th>
        <th scope="col">Route</th>
        <th scope="col">ETA</th>
        <th scope="col">Remark</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <th scope="row">1</th>
        <td>
          <div class="route"></div>
        </td>
        <td>
          <div class="but"></div>
        </td>
        <td></td>
      </tr>
      <tr>
        <th scope="row">2</th>
        <td>
          <div class="route"></div>
        </td>
        <td>
          <div class="but"></div>
        </td>
        <td></td>
      </tr>
      <tr>
        <th scope="row">3</th>
         <td>
          <div class="route"></div>
        </td>
        <td>
          <div class="but"></div>
        </td>
        <td></td>
      </tr>
    </tbody>
  </table>


</body>

JavaScript:

function repeat57() {
  $(function() {
    $.ajax({
      type: "GET",
      url: "https://data.etabus.gov.hk/v1/transport/kmb/eta/83B717529F9794BC/978/1",
      dataType: "json",
      success: function(data) {
        console.log(data); // -- Object
        var json = data;
        const buts = $('.but');
        for (var i = 0; i < json.data.length; i++) {
          var str = json.data[i].eta
          if (str !== null) {
            str = str.split("T").pop();
            str2 = str.split("+", 1).pop();
            str3 = str2.replace(/:/g, '');
            d = new Date();
            datetext = d.toTimeString();
            datetext = datetext.split(' ')[0];
            datetext = datetext.replace(/:/g, '');
            console.log(datetext)
            var eta = str3 - datetext;
            var eta2 = eta.toString().slice(0, -2) + " mins";
          } else {
            var remark = json.data[i].rmk_tc
            eta2 = remark;
          }
          $(buts[i]).html(eta2);
        }
      }
    });
  });
  setTimeout(repeat57, 19000);
}
repeat57();


function repeat58() {
  $(function() {
    $.ajax({
      type: "GET",
      url: "https://data.etabus.gov.hk/v1/transport/kmb/eta/83B717529F9794BC/978/1",
      dataType: "json",
      success: function(data) {
        var json = data;
        console.log(json)
        const routeElements = $('.route');
        for (var i = 0; i < json.data.length; i++) {
          var str = JSON.parse(json.data[i].route)
          if (str !== null) {

          } else {
            var remark = json.data[i].rmk_tc
            str = remark;
          }
          $(routeElements[i]).html(str);
        }
      }
    });
  });
  setTimeout(repeat58, 19000);
}
repeat58();

确保将 id 更改为类(但、路由等)并将其添加到需要它的所有行中。

并且在遍历结果时,您可以通过索引选择正确的元素。

查看更新的 jsFiddle:https ://jsfiddle.net/sgjx05qf/

如果您总是知道结果的计数,这将是一个解决方案。


推荐阅读