Javascript 未捕获(承诺中)类型错误:data.forEach不是函数
在我的JavaScript代码中,我不断收到错误消息: 未捕获(承诺中)类型错误:data.forEach不是函数 HTML:Javascript 未捕获(承诺中)类型错误:data.forEach不是函数,javascript,html,Javascript,Html,在我的JavaScript代码中,我不断收到错误消息: 未捕获(承诺中)类型错误:data.forEach不是函数 HTML: JS: 工作 <script> let url = 'https://api.rust-servers.info/players/3450'; const playersDiv = document.querySelector('.players'); fetch(url) .then((res) => res.json())
JS:
工作
<script>
let url = 'https://api.rust-servers.info/players/3450';
const playersDiv = document.querySelector('.players');
fetch(url)
.then((res) => res.json())
.then((players) => {
console.log(players);
generateHtml(players)
})
const generateHtml = (data) => {
var html = ``;
data.forEach(player => {
html += `<div class="name" style="position: relative; font-size: 20px;display: block;width: 100%;"><center>${player.name}</center>`;
})
playersDiv.insertAdjacentHTML('afterBegin', html)
}
</script>
让url为空https://api.rust-servers.info/players/3450';
const playersDiv=document.querySelector('.players');
获取(url)
.然后((res)=>res.json())
.然后((玩家)=>{
控制台日志(播放器);
generateHtml(玩家)
})
const generateHtml=(数据)=>{
var html=`;
data.forEach(player=>{
html+=`${player.name}`;
})
playersDiv.insertAdjacentHTML('afterBegin',html)
}
不起作用
<script>
let url1 = 'https://api.rust-servers.info/status/3450';
const onlinernDiv = document.querySelector('.status');
fetch(url1)
.then((res) => res.json())
.then((status) => {
console.log(status);
generateHtmls(status)
})
const generateHtmls = (data) => {
var html = ``;
data.forEach(status => {
html += `<div class="name" style="position: relative; font-size: 20px;display: block;width: 100%;"><center>${status.players}</center>`;
})
onlinernDiv.insertAdjacentHTML('afterBegin', html)
}
</script>
让url1=https://api.rust-servers.info/status/3450';
const onlinernDiv=document.querySelector('.status');
获取(url1)
.然后((res)=>res.json())
。然后((状态)=>{
控制台日志(状态);
生成HTML(状态)
})
const generateHtmls=(数据)=>{
var html=`;
data.forEach(状态=>{
html+=`${status.players}`;
})
onlinernDiv.insertAdjacentHTML('afterBegin',html)
}
第一个脚本有效,但第二个脚本无效。为什么在第二个脚本中出现错误?第二部分(https://api.rust-servers.info/status/3450
)导致该问题
服务器返回:
{
"name": "Sharons Server",
"status": "Online",
"last_seen": "1583873401",
"players": "19",
"players_max": "200",
"fps": "222",
"uptime": "3 days, 13 hrs"
}
这是一个对象,而不是数组。所以你不能在上面使用
.forEach()
。前几天我在调试前端时遇到了这个问题。
当返回一个对象时,forEach会中断,因此我们需要其他东西来迭代响应
有时候我的承诺会返回一个对象,有时候它会返回一个数组。
如果有很多结果需要排序,并且承诺花费的时间更长,我总会得到一个对象
因此,这对数组和具有行的对象都有效
if (Object.keys(players).length > 0) {
for (const key in players) {
html += '<div>' + players[key].status + '</div>';
}
}
if(Object.key(players.length>0){
用于(康斯特键入玩家){
html+=''+玩家[键]。状态+'';
}
}
发生了什么错误?编辑我很笨,一般来说错误应该在正文中。@Phix标题中有错误。我认为除非你告诉我们什么是数据
,否则任何人都帮不了你。它是一个数组吗?我打赌不是。谢谢大家!我可以在上面使用什么?你可以像这样访问值:data.name
或者像这样迭代所有键:对于(const-key-in-data){/*使用键做某事,使用data[key]*/}访问值
。进一步阅读:,我只需要将data.forEach更改为data.name?我只是那样做了,但似乎不起作用。(我是初学者,如果我问了很多问题,我很抱歉)不用担心。不,您不能只替换数据。forEach
forEach
是一个仅对阵列可用的函数。然而,你有一个对象。使用data.name
或data.status
可以使用这些值(“Sharons Server”
,“Online”
)。您需要像这样重写代码:html+=`${data.players}`代码>以接收相同的结果
if (Object.keys(players).length > 0) {
for (const key in players) {
html += '<div>' + players[key].status + '</div>';
}
}