首页 > 解决方案 > 无法使用 fetch() 从 carquery API 获取 API

问题描述

我正在尝试使用获取请求从 carquery API 获取数据,但是我收到一个错误

获取https://www.carqueryapi.com/api/0.3/?callback=?cmd=getModels&make=ford&year=2005&sold_in_us=1&body=SUV net::ERR_FAILED

Uncaught (in promise) TypeError: Failed to fetch

const fetchItems = async () =>{
    // const data = await fetch('https://jsonplaceholder.typicode.com/photos?_limit=5')

    const data = await fetch('https://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=ford&year=2005&sold_in_us=1&body=SUV')

    const items = await data.json()
    console.log(items)
    setItems(items)
}

这是我在邮递员中得到的回复 在此处输入图像描述

标签: reactjs

解决方案


在您包含的错误中,cmd查询参数之前缺少一个&符号(尽管您共享的代码有它,所以请仔细检查 URL)。当您不将代码包装在try...catch. 如果没有捕获,错误的真实细节将被掩盖。

似乎 API 没有返回格式正确的 JSON 作为响应,因此您可以将项目作为纯文本获取,修剪掉有问题的字符,slice然后手动解析字符串。

const fetchItems = async () => {
  const url = 'https://www.carqueryapi.com/api/0.3/?callback=?&cmd=getModels&make=ford&year=2005&sold_in_us=1&body=SUV'
  const headers = {
    headers : { 
      'Content-Type': 'application/json',
      'Accept': 'application/json'
    }
  }

  try {
    const data = await fetch(url, headers)

    const items = await data.text()

    console.log(JSON.parse(items.slice(2, -2)))
  } catch(err) {
    console.log(err)
  }
}

推荐阅读