javascript - 获取返回 JSON 的外部 API 时出现问题

标签 javascript json cors fetch-api

我在获取应返回 JSON 的外部 API 时遇到问题。

该 API 未启用 CORS,因此我尝试使用带有选项 mode: "no-cors" 的 fetch。 我尝试使用 jsonp 但根本不起作用。

所以这是一段代码:

fetch(APIURL, {
  mode: "no-cors",
}).then(response => {
  console.log(response)
  return response.json();
}).then(data => {
  console.log(data);
}).catch(err => {
  console.log(err)
});

catch 语句返回:

SyntaxError: "JSON.parse: unexpected end of data at line 1 column 1 of the JSON data"

这是console.log(response)的结果

bodyUsed: true
headers: Headers
   <prototype>: HeadersPrototype { append: append(), delete: delete(), get:   get(), … }
ok: false
redirected: false
status: 0
statusText: ""
type: "opaque"
url: ""
<prototype>: ResponsePrototype { clone: clone(), arrayBuffer: arrayBuffer(), blob: blob(), … }

但是在网络选项卡中,我可以看到我想要使用的 JSON 响应,所以我觉得很奇怪,我可以在那里看到它,所以我认为问题出在我这边。我尝试在验证器中验证 JSON 输出,它是有效的 JSON。

有什么想法吗?

最佳答案

一般情况下,由于同源政策,您无法从第三方站点读取数据。

CORS 允许第三方网站授予您的 JavaScript 读取数据的权限。

no-cors 设置是 JavaScript 表达“我不想做任何需要 CORS 许可的事情”的一种方式。这使您可以请求发送数据而无法读取响应(好处是它可以避免在开发人员控制台上抛出错误消息,告诉您无法读取您不想读取的数据) .

由于需要读取数据,所以不能使用no-cors

由于站点不提供CORS权限,因此无法直接使用客户端代码读取数据。

使用代理。

关于javascript - 获取返回 JSON 的外部 API 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54438306/

相关文章:

javascript - 轻弹切换CSS

javascript - rails 5.1 : How to override confirmation dialog with bootstrap using rails-ujs

Java,从单独的 JSON 值到字符串的日期

json - 在 Node JS 中解析包含单个对象的数组

mysql - Highstock mysql json比较多个系列

ssl - Socket.IO:跨域请求被阻止:同源策略不允许读取远程资源

javascript - Shopify 使用购买按钮添加额外参数

javascript - 通过 G+ API 登录不会使用户登录到 YouTube 上的正确帐户

Javascript CORS 请求,不存在 'Access-Control-Allow-Origin' header 和 200 状态代码

javascript - CORS 问题 - Angular/PHP/Apache