You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中Fetch函数无法返回字符串至HTML标签的问题

问题原因及解决方案

为什么返回值会显示[object Promise]

norrisRandom是async函数,这类函数的返回值永远是一个Promise对象,而非你期望的笑话字符串。直接把Promise对象赋值给innerHTML,浏览器会将其转为字符串,就出现了[object Promise]。

第一个可行的代码里,是在fetch的.then()回调中直接操作DOM——这时候已经等待请求完成,拿到了实际的data.value(笑话字符串),所以能正常展示。

实现“调用一次函数,在多个区域展示”的正确写法

利用await获取Promise的最终结果(事件监听函数已标记为async,可直接用await),拿到笑话字符串后批量更新多个DOM元素:

document.querySelector('#bt_funFact').addEventListener('click', async () => {
  // 等待Promise完成,拿到实际的笑话字符串
  const joke = await norrisRandom();
  // 同时更新多个展示区域
  document.getElementById('funFact').innerHTML = joke;
  document.getElementById('funFact2').innerHTML = joke;
  // 可继续添加更多需要展示的元素
})

async function norrisRandom() {
  // 用await简化Promise链,代码更清晰
  const response = await fetch('https://api.chucknorris.io/jokes/random');
  const data = await response.json();
  return data.value;
}

如果你习惯用.then()的写法,也可以这么写:

document.querySelector('#bt_funFact').addEventListener('click', () => {
  norrisRandom().then(joke => {
    document.getElementById('funFact').innerHTML = joke;
    document.getElementById('funFact2').innerHTML = joke;
  })
})

async function norrisRandom() {
  const response = await fetch('https://api.chucknorris.io/jokes/random');
  const data = await response.json();
  return data.value;
}

内容的提问来源于stack exchange,提问作者Macronaute

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 05:12:13