【发布时间】:2020-12-23 00:33:13
【问题描述】:
我正在尝试学习 Javascript,我正在做一个练习,它获取两种不同的 API,一个用于用户,另一个用于帖子。练习有两个问题;第一个问题是关于获取用户并将其显示在网站上。用户来自本站https://jsonplaceholder.typicode.com/users.
第二个问题是关于获取帖子的。当用户在网站上显示时,您可以选择一个用户并获取他的帖子。用户的帖子将显示在列表中。要获取帖子/帖子,我需要使用以下网址:/posts?userId={userId}。例如,如果您单击用户 ID 为 5 的用户,您将从以下 url 获取他的帖子:https://jsonplaceholder.typicode.com/posts?userId=5 我已经完成了第一个问题,但需要帮助才能完成第二个问题。谁能帮帮我?
How to place posts under the username?
fetch('https://jsonplaceholder.typicode.com/users')
.then(function (response) {
return response.json();
})
.then(function (data) {
appendData(data);
})
.catch(function (err) {
console.log('error: ' + err);
});
function appendData(data) {
var mainContainer = document.getElementById("users");
for (var i = 0; i < data.length; i++) {
var li = document.createElement("li");
li.innerHTML = data[i].username;
li.dataset.userId = data[i].id;
li.addEventListener('click', (event) => getPosts(event))
mainContainer.appendChild(li);
}
}
function getPosts(event) {
var userId = event.target.dataset.userId;
fetch(`https://jsonplaceholder.typicode.com/posts?userId=${userId}`)
.then(response => response.json())
.then(json => renderPosts(json))
}
function renderPosts(posts) {
var titleContainer = document.getElementById("postTitle");
var bodyContainer = document.getElementById("postBody");
for (var i = 0; i < posts.length; i++) {
var liTitle = document.createElement("li");
var liBody = document.createElement("li");
liTitle.innerHTML = posts[i].title;
liBody.innerHTML = posts[i].body;
titleContainer.appendChild(liTitle);
bodyContainer.appendChild(liBody);
//var title = posts.data.title;
//var body = posts.data.body;
//document.getElementById("postTitle").innerHTML = titleContainer;
//document.getElementById("postBody").innerHTML = bodyContainer;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Javascript API Fetch Users and Posts</title>
</head>
<body>
<h1>Users</h1>
<div id="users"></div>
<div id="postBody"></div>
<div id="postTitle"></div>
<script src="script.js"></script>
</body>
</html>
【问题讨论】:
-
好吧,我想您应该为每个显示的用户添加
getPosts()函数,对吧?这样当您单击用户时,它会获取该用户的帖子?因此,我将更改appendData以向每个li添加一个事件侦听器,该事件侦听器指向一个调用getPosts(userId)的函数,并带有用户的ID。因此,您需要更改getPosts以获取userId参数,并将其传递到您要获取的 URL 中。
标签: javascript html fetch-api