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

请帮忙排查调用Yelp API的HTTP请求代码出现403及JSON解析错误问题

问题1:fetch结果赋值逻辑错误

你当前代码中把await fetch()的返回值传给了console.log(),再将console.log()的返回值赋值给rawData,而console.log()的返回值是undefined,后续调用undefined.json()直接触发异常。
同时403状态码返回的响应内容是纯文本错误提示,不是JSON格式,直接调用.json()也会触发JSON解析异常。

问题2:403 Forbidden错误原因

你使用的公共cors-anywhere.herokuapp.com代理服务早已停止公开无限制使用,该公共演示实例现在仅作演示用途,限流严格,绝大多数请求会直接返回403。另外还需要确认你的Yelp API_KEY是否有效、未过期。


修复方案

第一步:修正请求逻辑

const fetchData = async (e) => {
    const BASE_URL = "https://cors-anywhere.herokuapp.com/https://api.yelp.com/v3/businesses/search"
    e.preventDefault();   
    setHome(false)
    try{
        // 先获取请求响应,再单独打日志
        const response = await fetch(`${BASE_URL}?location=ny&term=pizza`, {
            headers: {
                Authorization: `Bearer ${API_KEY}`,
            }
        })
        console.log(response)
        // 先判断请求是否成功,再解析响应
        if (!response.ok) {
            const errText = await response.text()
            throw new Error(`请求失败,状态码:${response.status},错误内容:${errText}`)
        }
        const res = await response.json();
        setRestaurants(res.businesses)
        setParams({
            term: "",
            location: ""
        })
    } catch (error) {
        console.error(error)
    }
}

第二步:解决跨域代理问题

  • 最优方案:自行实现后端接口转发Yelp请求,前端只请求你自己的后端接口,既可以避免跨域问题,也能避免把Yelp API_KEY直接暴露在前端代码中导致密钥泄露。
  • 本地测试方案:安装浏览器跨域禁用插件,直接请求Yelp官方接口,不需要走cors-anywhere代理;也可以在本地自行部署cors-anywhere服务使用。
  • 确认你的Yelp API_KEY配置正确,在Yelp开发者后台拥有对应接口的访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:48:04