开发者问题收集

尝试从外部 API 显示图像时出错(JSON 中出现意外令牌 �)

2020-10-22
190

我尝试显示来自外部 API 的图像。但我只收到错误

Uncaught (in promise) SyntaxError: Unexpected token � in JSON at position 0"

我猜问号意味着它是某种无法识别的东西……

无论如何,我按照 API 的文档来显示图像。要从寄存器中获取图像,我使用端点 Article File Connections 来获取 FileId,我在 Archive 端点中使用该 FileId 来获取图像。

以下是两个端点的文档:

当我在 postman 中尝试使用 itemIdFileId 的端点时,它可以工作并显示图像,但我的代码中没有。所以我的代码中肯定有什么地方做错了。但是到底是什么问题呢?

我觉得是我的 SingleProductImage 页面出了问题,有人能帮忙吗?

我正在使用 React hooks 来获取 api,这是我的代码:

export const SingleProductImage = (props) => {
  const [articleImg, setArticleImg] = useState('')
  console.log(articleImg) // when I console this nothing shows
  console.log(props.fileid) // when I console this the fileid shows

  useEffect(() => {
      fetch('https://cors-anywhere.herokuapp.com/https://api.fortnox.se/3/archive/${props.fileid}', {
        method: 'GET',
        headers: {
          'Content-Type': 'application/json',
          Accept: 'application/json',
          'Access-Token': accessToken,
          'Client-Secret': clientSecret
        }
      })
    
    .then((res) => res.json())
    .then((data) => {
      setArticleImg(data)
      console.log(data)
    })
  }, [articleImg])

  return (
    <div>
      <img src={articleImg} alt="product" />
    </div>
  )
}

SingleProductImage 页面

export const SingleProductPage = () => {
  const { itemId } = useParams()
  const [article, setArticle] = useState([])
  const [articleImg, setArticleImg] = useState('')
  const [fileId, setFileId] = useState([])

  useEffect(() => {
    fetch(`https://cors-anywhere.herokuapp.com/https://api.fortnox.se/3/articles/${itemId}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
        Accept: 'application/json',
        'Access-Token': accessToken,
        'Client-Secret': clientSecret
      }
    })
      .then((res) => res.json())
      .then((data) => {
        console.log(data)
        setArticle(data.Article)
        console.log(data)
      })
  }, [itemId])

  useEffect(() => {
    fetch(`https://cors-anywhere.herokuapp.com/https://api.fortnox.se/3/articlefileconnections/?articlenumber=${itemId}`, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
        Accept: 'application/json',
        'Access-Token': accessToken,
        'Client-Secret': clientSecret
      }
    })
      .then((res) => res.json())
      .then((data) => {
        setFileId(data.ArticleFileConnections[0].FileId)
        console.log(data.ArticleFileConnections[0].FileId)
      })
  }, [itemId])

  return (
        <div>
          <SingleProductImage fileid={fileId} />
        </div>
)
1个回答

您正在将 .json() 强制转换为 api 返回的整个对象。相反,只采用 url,您的错误就会消失

... 
.then((res)=> setArticleImg(res.url))
.catch((err)=> console.log(err))

Slim
2020-10-22