首页 > 解决方案 > 从 JSON 中获取数据并使用 JavaScript 显示在 HTML 表上以传递数据 - 按种族过滤

问题描述

我试图从数据以 JSON 格式存储的 API URL 获取数据。我正在尝试获取数据并将其显示在 HTML 表上。我试着用谷歌搜索,结果如下。我想逐个展示比赛。例如,我想让 HTML 代码在另一列上仅显示 Race 1 和 Race 2。JSON 中的数据。

目前,我的代码正在获取所有比赛,而不仅仅是一场。

来自 JSON 的数据

{
   "date":"2021-06-19",
   "name":"05",
   "races":[
      {
         "race":{
            "number":"1",
            "time":"12H15",
            "name":"THE TOMMY BOY CUP - Valeur [0-25] - 1400 M \r",
            "ended":"0"
         },
         "horses":[
            {
               "number":"1",
               "name":"TYRANDEUS",
               "odds":"550",
               "type":""
            },
            {
               "number":"2",
               "name":"ZODIAC JACK",
               "odds":"1200",
               "type":""
            },
            {
               "number":"3",
               "name":"THE RIGHT STUFF",
               "odds":"650",
               "type":""
            },
            {
               "number":"4",
               "name":"AFTER THE ORDER",
               "odds":"1400",
               "type":""
            },
            {
               "number":"5",
               "name":"DOUBLE WINNER",
               "odds":"3000",
               "type":""
            },
            {
               "number":"6",
               "name":"BLEU ROYALE",
               "odds":"430",
               "type":""
            },
            {
               "number":"7",
               "name":"RED FORCE ONE",
               "odds":"200",
               "type":""
            },
            {
               "number":"8",
               "name":"TIME IS GOLD",
               "odds":"450",
               "type":""
            }
         ]
      },
      {
         "race":{
            "number":"2",
            "time":"12H50",
            "name":"THE MTCSPORTSANDLEISURE.COM CUP - Valeur [0-26] - 990 M \r",
            "ended":"0"
         },
         "horses":[
            {
               "number":"1",
               "name":"FAIRBANKS",
               "odds":"1500",
               "type":""
            },
            {
               "number":"2",
               "name":"CLOUD SEEDER",
               "odds":"1200",
               "type":""
            },
            {
               "number":"3",
               "name":"COURTROOM MAGIC",
               "odds":"650",
               "type":""
            },
            {
               "number":"4",
               "name":"FOLLOW SUIT",
               "odds":"450",
               "type":""
            },
            {
               "number":"5",
               "name":"MARULA",
               "odds":"220",
               "type":""
            },
            {
               "number":"6",
               "name":"ZENO",
               "odds":"900",
               "type":""
            },
            {
               "number":"7",
               "name":"ZENZERO",
               "odds":"300",
               "type":""
            },
            {
               "number":"8",
               "name":"ARTAX",
               "odds":"2000",
               "type":""
            }
         ]
      },
      {
         "race":{
            "number":"3",
            "time":"13H25",
            "name":"THE WORLD VETERINARY DAY CUP - Valeur Benchmark 31 - 1600 M \r",
            "ended":"0"
         },
         "horses":[
            {
               "number":"1",
               "name":"AFFRANCHI",
               "odds":"2500",
               "type":""
            },
            {
               "number":"2",
               "name":"AFRICAN ROCK",
               "odds":"270",
               "type":""
            },
            {
               "number":"3",
               "name":"IMPERIAL RAGE",
               "odds":"800",
               "type":""
            },
            {
               "number":"4",
               "name":"SENOR'S GUEST",
               "odds":"800",
               "type":""
            },
            {
               "number":"5",
               "name":"CAMP DAVID",
               "odds":"300",
               "type":""
            },
            {
               "number":"6",
               "name":"DREAMFOREST",
               "odds":"900",
               "type":""
            },
            {
               "number":"7",
               "name":"ITALIAN WAY",
               "odds":"500",
               "type":""
            },
            {
               "number":"8",
               "name":"LIT",
               "odds":"1200",
               "type":""
            },
            {
               "number":"9",
               "name":"THE GREY CRUSADER",
               "odds":"2000",
               "type":""
            },
            {
               "number":"10",
               "name":"OVERDOSE",
               "odds":"3300",
               "type":""
            },
            {
               "number":"11",
               "name":"STAR OF ZEUS",
               "odds":"-",
               "type":"1"
            }
         ]
      },
      {
         "race":{
            "number":"4",
            "time":"14H00",
            "name":"THE DR. V. PIERRE GOUPILLE CUP - Valeur Benchmark 41 - 1365 M \r",
            "ended":"0"
         },
         "horses":[
            {
               "number":"1",
               "name":"BOLD PHOENIX",
               "odds":"300",
               "type":""
            },
            {
               "number":"2",
               "name":"CLOUDED HILL",
               "odds":"1400",
               "type":""
            },
            {
               "number":"3",
               "name":"KING OF TARA",
               "odds":"500",
               "type":""
            },
            {
               "number":"4",
               "name":"HIGH VOLTAGE",
               "odds":"500",
               "type":""
            },
            {
               "number":"5",
               "name":"SAVVY",
               "odds":"2000",
               "type":""
            },
            {
               "number":"6",
               "name":"VARSIDE",
               "odds":"315",
               "type":""
            },
            {
               "number":"7",
               "name":"YANKEEDOODLEDANDY",
               "odds":"800",
               "type":""
            },
            {
               "number":"8",
               "name":"WHY WOULDN'T YEW",
               "odds":"550",
               "type":""
            }
         ]
      },
      {
         "race":{
            "number":"5",
            "time":"14H35",
            "name":"THE WORLD FOCUS CUP - Valeur Benchmark 46 - 1500 M \r",
            "ended":"0"
         },
         "horses":[
            {
               "number":"1",
               "name":"CARBON FIBRE",
               "odds":"2200",
               "type":""
            },
            {
               "number":"2",
               "name":"JOHN HANCOCK",
               "odds":"2200",
               "type":""
            },
            {
               "number":"3",
               "name":"CYBER SPECIAL",
               "odds":"470",
               "type":""
            },
            {
               "number":"4",
               "name":"DROP KICK",
               "odds":"230",
               "type":""
            },
            {
               "number":"5",
               "name":"SYDS LIASON",
               "odds":"700",
               "type":""
            },
            {
               "number":"6",
               "name":"TRIP TO THE SKY",
               "odds":"430",
               "type":""
            },
            {
               "number":"7",
               "name":"JET STREAM",
               "odds":"500",
               "type":""
            },
            {
               "number":"8",
               "name":"BONNIE PRINCE",
               "odds":"2000",
               "type":""
            },
            {
               "number":"9",
               "name":"THE BYZANTINE",
               "odds":"3000",
               "type":""
            },
            {
               "number":"10",
               "name":"GIGGIN",
               "odds":"1400",
               "type":""
            },
            {
               "number":"11",
               "name":"SOCKEROO",
               "odds":"-",
               "type":"1"
            }
         ]
      },
      {
         "race":{
            "number":"6",
            "time":"15H10",
            "name":"THE GUNNESS GUJADHUR CUP - Valeur Benchmark 66 - 1450 M \r",
            "ended":"0"
         },
         "horses":[
            {
               "number":"1",
               "name":"MARAUDING",
               "odds":"350",
               "type":""
            },
            {
               "number":"2",
               "name":"STOPALLTHECLOCKS",
               "odds":"1000",
               "type":""
            },
            {
               "number":"3",
               "name":"IDEAL SECRET",
               "odds":"550",
               "type":""
            },
            {
               "number":"4",
               "name":"SPECIAL BLEND",
               "odds":"4000",
               "type":""
            },
            {
               "number":"5",
               "name":"TOWER OF WISDOM",
               "odds":"500",
               "type":""
            },
            {
               "number":"6",
               "name":"VAR AND AWAY",
               "odds":"2500",
               "type":""
            },
            {
               "number":"7",
               "name":"RED MARS",
               "odds":"1700",
               "type":""
            },
            {
               "number":"8",
               "name":"TRIPLE FATE LINE",
               "odds":"2000",
               "type":""
            },
            {
               "number":"9",
               "name":"BACKPACKER",
               "odds":"4000",
               "type":""
            },
            {
               "number":"10",
               "name":"DYNAMITE JACK",
               "odds":"200",
               "type":""
            },
            {
               "number":"11",
               "name":"STREAM AHEAD",
               "odds":"-",
               "type":"1"
            }
         ]
      },
      {
         "race":{
            "number":"7",
            "time":"15H45",
            "name":"THE LALDHEER CUP - Valeur Benchmark 36 - 1500 M \r",
            "ended":"0"
         },
         "horses":[
            {
               "number":"1",
               "name":"APOLLO STAR",
               "odds":"1000",
               "type":""
            },
            {
               "number":"2",
               "name":"BOUND BY DUTY",
               "odds":"1000",
               "type":""
            },
            {
               "number":"3",
               "name":"DO OR DARE",
               "odds":"550",
               "type":""
            },
            {
               "number":"4",
               "name":"ITDAWNEDONME",
               "odds":"500",
               "type":""
            },
            {
               "number":"5",
               "name":"SAND PATH",
               "odds":"350",
               "type":""
            },
            {
               "number":"6",
               "name":"ALAMEERY",
               "odds":"2500",
               "type":""
            },
            {
               "number":"7",
               "name":"BOLLINGER",
               "odds":"1600",
               "type":""
            },
            {
               "number":"8",
               "name":"BORYA",
               "odds":"800",
               "type":""
            },
            {
               "number":"9",
               "name":"G I JOE",
               "odds":"300",
               "type":""
            },
            {
               "number":"10",
               "name":"WELL CONNECTED",
               "odds":"2000",
               "type":""
            },
            {
               "number":"11",
               "name":"NAO FAZ MAL",
               "odds":"-",
               "type":"1"
            }
         ]
      },
      {
         "race":{
            "number":"8",
            "time":"16H20",
            "name":"THE RAYMOND ANTELME PLATE - Valeur [0-26] - 1600 M \r",
            "ended":"0"
         },
         "horses":[
            {
               "number":"1",
               "name":"HIGH KEY",
               "odds":"300",
               "type":""
            },
            {
               "number":"2",
               "name":"SUPREME ORATOR",
               "odds":"800",
               "type":""
            },
            {
               "number":"3",
               "name":"CANARY ISLAND",
               "odds":"270",
               "type":""
            },
            {
               "number":"4",
               "name":"RUBY SPIRIT",
               "odds":"450",
               "type":""
            },
            {
               "number":"5",
               "name":"TICKET HOLDER",
               "odds":"1500",
               "type":""
            },
            {
               "number":"6",
               "name":"WEST COAST WARRIOR",
               "odds":"470",
               "type":""
            },
            {
               "number":"7",
               "name":"JET PATH",
               "odds":"1800",
               "type":""
            },
            {
               "number":"8",
               "name":"DAREDEVIL AVIATOR",
               "odds":"2500",
               "type":""
            },
            {
               "number":"9",
               "name":"GREATFIVEEIGHT",
               "odds":"2500",
               "type":""
            }
         ]
      }
   ]
}

Javascript

    // api url
const api_url = 
      "https://www.smspariazitservices.com/applications/horse-racing-ws/mtc/actions/getDataBKS.php?date=2021-06-19&mno=05";
  
// Defining async function
async function getapi(url) {
    
    // Storing response
    const response = await fetch(url);
    
    // Storing data in form of JSON
    var data = await response.json();
    console.log(data);
    if (response) {
        hideloader();
    }
    show(data);
}
// Calling that async function
getapi(api_url);
  
// Function to hide the loader
function hideloader() {
    document.getElementById('loading').style.display = 'none';
}
// Function to define innerHTML for HTML table
 function show(data) {
        let tab = 
            `<tr>
            <th>Race #</th>
            <th>Race Name</th>
            <th>Race Date</th>
            </tr>`;
        // Loop to access all rows 
        for (let r of data.races) {
            let { race, horses } = r;
            tab += `<tr> 
                <td>${race.number} </td>
                <td>${race.name}</td>
                <td>${race.time}</td> 
            </tr>
            <tr><td>Number</td><td>Name</td><td>Odds</td></tr>
            `;
            tab += horses.map( ({number, name, odds})  => `<tr><td>${number}</td><td>${name}</td><td>${odds}</td></tr>`).join();
            tab += `<tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>`;
        }

        // Setting innerHTML as tab variable
        document.getElementById("racing").innerHTML = tab;
    }

HTML

 <!DOCTYPE html>
<html lang="en">
    <head>
       
        <meta charset="UTF-8" />
        <meta name="viewport" 
              content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
       </head>
    <body>
        <!-- Here a loader is created which 
             loads till response comes -->
        <div class="d-flex justify-content-center">
            <div class="spinner-border" 
                 role="status" id="loading">
                <span class="sr-only">Loading...</span>
            </div>
        </div>
        <h1>ODDS</h1>
        <!-- table for showing data -->
        <table id="racing"></table>
    </body>
</html>

我想实现类似这张图片的 目标

谢谢你的帮助

标签: javascripthtmljqueryjson

解决方案


推荐阅读