简体   繁体   中英

how do I convert json data into Html tag?

I am trying to display JSON data in the Html tag. But I got the error:

Uncaught (in promise) TypeError.

 async function fetchData() { const response = await fetch('http://newsapi.org/v2/top-headlines?country=in&apiKey=520bf969179e416aa2c3608591647a76'); const data = await response.json(); console.log(data); document.getElementById("display").insertAdjacentText = ` ${data.articles.map(function (article) { return ` <ul id="news-articles"> <li class="article"><img class="article-img" src="${article.urlToImage}" alt="article-img"></li> <li class="article"><h2 class="article-title">${article.title}</h2></li> <li class="article"><p class="article-description">${article.description}</p></li> <li class="article"><span class="article-author">${article.author}</span></li> <li class="article"><a class="article-link" href="">${article.url} target="_blank"> </a></li> </ul> ` }).join('')}` } fetchData();
 <div class="display"></div>

Currently you are inserting HTML entities as text, which is not going to work.

Try

 async function fetchData() { const response = await fetch('http://newsapi.org/v2/top-headlines?country=in&apiKey=520bf969179e416aa2c3608591647a76'); const data = await response.json(); console.log(data); document.getElementsByClassName("display")[0].innerHTML = data.articles.map(function (article) { return ` <ul id="news-articles"> <li class="article"><img class="article-img" src="${article.urlToImage}" alt="article-img"></li> <li class="article"><h2 class="article-title">${article.title}</h2></li> <li class="article"><p class="article-description">${article.description}</p></li> <li class="article"><span class="article-author">${article.author}</span></li> <li class="article"><a class="article-link" href="">${article.url} target="_blank"> </a></li> </ul>`; }).join(''); } fetchData();

The problem is your div element is of class display , not id display , and thus document.getElementById("display") returns null. Change class="display" to id="display" .

Also, use document.getElementById("display").innerHTML for this.

You referenced by id="display" , but it was set to class="display" .

 async function fetchData() { const response = await fetch('http://newsapi.org/v2/top-headlines?country=in&apiKey=520bf969179e416aa2c3608591647a76'); const data = await response.json(); document.getElementById("display").innerHTML = data["articles"].map( article => `<ul id="news-articles"> <li class="article"><img class="article-img" src="${article.urlToImage}" alt="article-img"></li> <li class="article"><h2 class="article-title">${article.title}</h2></li> <li class="article"><p class="article-description">${article.description}</p></li> <li class="article"><span class="article-author">${article.author}</span></li> <li class="article"><a class="article-link" href="">${article.url} target="_blank"> </a></li></ul>`).join(''); } fetchData();
 <div id="display"></div>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM