【问题标题】:How can I correctly fetch the Riot API with JS?如何使用 JS 正确获取 Riot API?
【发布时间】:2020-10-04 02:10:35
【问题描述】:

我一直在尝试从 riot 的 api 中获取一些数据,但我遇到了一个问题:

这是代码的重要部分:

const getUsuario = async (name) => {
  const resp = await fetch(`${APIRUL}${name}${apikey}`, {
    method: 'GET',
    mode: 'no-cors',
    headers: {
      "Content-Type": "application/json",
    },
  });
  const { data } = await resp.json();
  return data;
};

getUsuario("user-name");

如果我输入 mode: cors。我的 CORS 有问题,但如果我有上面的例子,它会显示:

champions.js:15 Uncaught (in promise) SyntaxError: Unexpected end of input
    at getUsuario (champions.js:15)

这是第 15 行:

const { data } = await resp.json();

【问题讨论】:

  • 你确定返回的响应是json类型的吗?
  • 说实话,我不确定。但如果我用邮递员做,我会得到正确的输出。
  • 在邮递员中它应该告诉你响应的内容类型是什么。
  • 是的,上面写着 application/json;charset=utf-8
  • 你能登录let textResponse = await resp.text()吗?

标签: javascript riot-games-api


【解决方案1】:

我发现了与您在此处看到的类似的错误:fetch() unexpected end of input

在将响应转换为 json 之前尝试打印响应,看看是否看到类型 opaque。这专门用于获取使用模式 no-cors 发出的请求。使用这种响应可以做的事情似乎有很多限制。

更新:RiotGames api 服务器不返回 CORS 标头是有原因的。他们很可能不希望您直接从浏览器访问他们的 API。您需要有一个后端为您发出这些 api 请求,然后它可以将响应转发到您的前端。

【讨论】:

  • 如果我做 resp.text() 我得到未定义,如果我在将响应转换为 json 之前打印响应,我得到类型不透明。我不知道与此有关
  • 您确定您的请求网址正确吗?可能 URL/API Token 参数有问题,你得到没有正文的 403 错误。也许……
  • @Knarf 这是一个 CORS 问题 - 服务器可能没有返回一些 CORS 标头。阅读这篇谷歌文章以获得很好的解释:developers.google.com/web/updates/2015/03/…
  • 我在邮递员中使用了相同的网址并得到了我想要的,所以我认为它是正确的。
  • 是的,我正在其他地方阅读,似乎是这样 - 我更新了我的答案。烦人,但至少你知道出了什么问题:)
猜你喜欢
  • 2021-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-12
  • 2014-11-20
  • 2020-05-26
  • 2023-01-26
  • 2023-02-04
相关资源
最近更新 更多