django Javascript提取函数返回[对象承诺]

3ks5zfa0  于 2022-11-18  发布在  Go
关注(0)|答案(2)|浏览(99)

我目前正在做一个项目,其中包括一个网站,由Django构建和运行。在这个网站上,我尝试通过快速API加载数据,并尝试通过JavaScript和Fetch API加载这些数据。但我总是得到一个[object Promise],而不是通过API提供的数据。我尝试了许多不同的方法,但似乎都不起作用。
我试过打个比方:

document.getElementById("1.1").innerHTML = fetch('the URL')
 .then(response => response.text())

document.getElementById("1.1").innerHTML = fetch('the URL')
.then(response => response.text())
.then((response) => {
    console.log(response)
})

和许多其他方法。我也检查了,API请求工作正常,返回一个字符串。

pn9klfpd

pn9klfpd1#

您希望在记录最终响应时显示html的设置,例如:

fetch('the URL')
.then(response => response.text())
.then((response) => {
    console.log(response)
    document.getElementById("1.1").innerHTML = response
})

其他方式包括使整个响应承诺得以履行:

const getData = async (url) => {
  const res = await fetch(url)
  const resText = await res.text()
  return resText
}
const addTextFromUrl = async (url, element) => {
  const text = await getData(url)
  element.innerHtml = text
}
addTextFromUrl('theUrl', document.getElementById("1.1"))

一般来说,在学习时遵循async/await语法会更容易一些,但您应该始终尝试/捕捉任何错误。

hiz5n14c

hiz5n14c2#

每个.then调用都返回一个新的承诺。
您需要在回调中赋值或使用async/await

fetch('the URL')
.then(response => response.text())
.then((response) => {
    document.getElementById("1.1").innerHTML = response
})

或者在异步函数中执行

async function getHtml() {
  document.getElementById("1.1").innerHTML = await fetch('the URL')
   .then(response => response.text())
}

getHtml();

不使用then

async function getHtml() {
  const response = await fetch('the URL');

  const html - await response.text();

  document.getElementById("1.1").innerHTML = html;
}

getHtml();

相关问题