【问题标题】:Getting errors while trying to get json data from public api尝试从公共 api 获取 json 数据时出错
【发布时间】:2020-09-14 02:56:02
【问题描述】:

我正在尝试从此地址data source获取数据

并且出现错误,我正在编写的代码是

(function(){

async function GetCovidNumbers(){
    const url = "api.opencovid.ca/summary?loc=canada&date=01-09-2020";
    //debugger;
    const data = await fetch(url);
    const response = await data.json();

    console.log(response);
}
GetCovidNumbers();

})();

我遇到的错误是

一个给我一个 404 错误,但是如果我将 url 放在浏览器中,那么我会得到数据,另一个错误是

Uncaught (in promise) SyntaxError: Unexpected token

我尝试在网址前添加 http:// 甚至 https:// ,但这不起作用。

所以我显然做错了什么,有人知道是什么吗?

【问题讨论】:

  • “我试过在url前面加上http://甚至https://”好吧,你要加@ 987654324@。否则,将被视为相对 URL,事实并非如此。我看到的另一个问题是 API 不支持 HTTPS。如果您的站点使用 HTTP,那很好。否则会因为 API 不安全而被浏览器屏蔽。在这种情况下,您可能需要使用代理,例如 CORS Anywhere
  • @blex,是的,需要在任何地方使用 CORS。如果您想将其发布为答案和解释,那么我很乐意接受

标签: javascript async-await fetch


【解决方案1】:

您需要指定协议(http://https://),否则将被视为相对 URL。

现在,我看到 API 不支持 HTTPS。如果您的站点使用 HTTP,这不是问题。但如果您的网站使用的是 HTTPS,那么浏览器会阻止该请求,因为 API 不安全。

在这种情况下,您可以使用 HTTPS 代理来发出请求。 CORS Anywhere就是这样的服务。

演示(加载需要几秒钟)

async function GetCovidNumbers() {
  const corsPrefix = "https://cors-anywhere.herokuapp.com/";
  const url = corsPrefix + "http://api.opencovid.ca/summary?loc=canada&date=01-09-2020";

  const data = await fetch(url);
  const response = await data.json();

  console.log(response);
}

GetCovidNumbers();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-24
    • 2021-06-18
    • 2020-05-08
    • 2017-01-04
    • 2020-07-25
    • 2022-01-02
    相关资源
    最近更新 更多