javascript - 为什么我会收到来自 api 调用的重复响应?
问题描述
我正在发送一个 api 请求并从数据中取回重复或重复的响应。我为每只狗发送狗名和 id 的 api 请求,并将数据放在 html 位置。第一只狗来了三次,然后第二只狗来了,然后第一只狗又来了,第三只狗又来了,第二只狗又来了,依此类推。
我已经尝试过 fetch api 和 async await ,它们都做同样的事情。Iv,e 还使用了 map、forEach 和 for in,结果都相同。
fetch(api)
.then(response =>{
return response.json();
})
.then(data => {
console.log(data)
let dogs = data;
let output = '';
dogs.forEach(dog => {
console.log(dog.id);
output+=`
<div className="col-10 mx-auto col-md-6 col-lg-4 my-3">
<div className="card">
<img src="gdogs.jpg" className="img-card-top" style="height:14rem"alt="dogs"/>
<div className="card-body text-capitalize">
<h6 class="name-title">${dog.name}</h6>
<h6 class="id">${dog.id}</h6>
<h6 className="text-warning text-slanted">Provided by Dog API</h6>
</div>
<div className="card-footer">
<button type="button" className="btn btn-primary text-capitalize" ></button>
<a href="https://api.thedogapi.com" className="btn btn-success mx-2 text-capitalize" target="_blank" rel="noopener noreferrer">dog api</a>
</div>
</div>
</div>
`
document.getElementById('dog-info').insertAdjacentHTML('beforeend', output)
});
我只是希望狗按时间顺序输出而不重复。我没有收到任何错误消息。任何帮助将不胜感激。提前致谢。
解决方案
您正在将每只狗的 HTML 以及之前的每只狗添加到output
变量中。除此之外,您正在insertAdjacentHTML
反复运行呼叫,每只狗一次。这意味着每次您将 的内容添加output
到页面中时,您都会获得全部内容,包括到目前为止处理的每只狗,而不仅仅是当前的。
有两种明显的方法可以解决这个问题。任何一个
1) 删除ie+
中的,这样 output` 每次都会被覆盖而不是附加到。+=
output =
或者
insertAdjacentHTML
2)在 foreach 循环结束后将调用移至to ,这样output
当您完成为所有狗生成 HTML 时,您只需将 的内容写入页面一次。
推荐阅读
- javascript - 检查光标何时悬停在链接上(尤其是 YouTube 链接)
- c - C char* array 赋值索引
- android - Android 未定义对 ANativeWindow_setBuffersTransform API 的引用
- javascript - Firestore:Javascript:如何将用户输入转换为数组并将其存储在 Firestore 中?
- python - 从 Python / Sqlalchemy 中的数据库记录访问枚举值
- android - 在android中获取FirebaseUser Token
- sql-server - 正则表达式 2 个字母和 3、4 或 5 位数字
- laravel - Laravel - 将两个关系映射到一个
- php - Laravel:多个模型的一个观察者
- c++ - 使用 C++ 订阅 AWS AppSync