我在获取应该返回JSON的外部API时遇到问题。
该API未启用CORS,因此我尝试将fetch与选项mode: "no-cors"
一起使用。
我尝试使用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。
有什么想法吗? 谢谢。
答案 0 :(得分:1)
在正常情况下,由于同源政策的限制,您无法从第三方站点读取数据。
CORS允许第三方站点向您的JavaScript授予读取数据的权限。
SELECT s.lastname,s.firstname,LatestDate,s1.position,s1.salary
FROM constructiondb.dbo.employeetb s
JOIN
(
SELECT IDNo,position,salary,projectid, MAX(datestarted) AS LatestDate
FROM constructiondb.dbo.eassignmenttb
GROUP BY IDNo,position,salary,projectid
) s1 ON s.IDNo = s1.IDNo
INNER JOIN constructiondb.dbo.ProjectTB s2 on s2.ProjectNo=s1.projectid
where lastname='lian'and firstname='nez'
设置是JavaScript表示“我不想做需要CORS许可的任何事情”的一种方式。这样一来,您就可以在不读取响应的情况下发出发送数据的请求(这样做的好处是,它避免在整个开发人员控制台上抛出一条错误消息,告诉您无法读取未尝试读取的数据)
由于需要读取数据,因此无法使用no-cors
。
由于该网站未提供CORS的权限,因此您无法直接使用客户端代码读取数据。
使用代理。