javascript - 尝试从公共(public) api 获取 json 数据时出现错误

标签 javascript async-await fetch

我正在尝试从此地址 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 < in JSON at position 0

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

所以我显然做错了什么,有人看到它是什么吗?

最佳答案

您需要指定协议(protocol)(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();

关于javascript - 尝试从公共(public) api 获取 json 数据时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63874312/

相关文章:

javascript - 如何识别HandleErrorAttribute OnException中的javascript fetch()?

javascript - 需要帮助调用倒计时函数

javascript - 两个签名添加不起作用

javascript - 如何在 Parse 推送通知中包含特定于用户的数据?

javascript - 如何从浏览器中删除单个Cloudinary镜像?

c# - HttpClient PostAsJsonAsync 方法无法正常工作(序列化无法正常工作)

c# - 将 UI 线程的 TaskScheduler 存储在字段中是否安全?

asynchronous - 是否可以在 webmethod asmx 服务中使用 async/await

json - 将 json 文件中的静态数据导入 Backbone 模型

javascript - 只获取循环中返回的最后一项