提取外部API返回JSON时出现问题

时间:2019-01-30 10:24:03

标签: javascript json api cors fetch

我在获取应该返回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。

有什么想法吗? 谢谢。

1 个答案:

答案 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的权限,因此您无法直接使用客户端代码读取数据。

使用代理。