【发布时间】:2025-12-11 01:35:01
【问题描述】:
我在获取应该返回 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。
有什么想法吗? 谢谢。
【问题讨论】:
-
如果没有
Access-Control-Allow-Origin: *标头,您根本无法访问它。据我所知,您唯一的选择是要求 API 的所有者添加您的 IP / 域,或者他可以将值设置为*以允许所有人访问它,或者您可以使用完全不同的 API 支持CORS。 -
能不能写出console.log(response)的结果
-
这是您尝试调用的公共 REST API 吗?好像是网络错误。如果您可以分享API地址,我们可以为您试用
-
@mstfyldz 我已经用回复编辑了帖子
-
response 不是 json,所以不能对非 json 结构的数据使用 response.json()。
标签: javascript json api cors fetch