如何在javascript中使用fetch()读取JSON文件?

IT技术 javascript json
2021-02-20 04:26:17

如何使用 javascript 中的 fetch 函数读取本地 JSON 文件?我有一个带有一些转储数据的 JSON 文件和一个在服务器上读取 JSON 文件的函数。例如 :

readJson () {
   console.log(this)
   let vm = this
   // http://localhost:8080
   fetch('/Reading/api/file').then((response) => response.json()).then(json => {
       vm.users = json
       console.log(vm.users)
   }).catch(function () {
       vm.dataError = true
   })
}

那么,在这个 fetch 函数中读取本地 json 文件必须做什么?

2个回答

如何使用 javascript 中的 fetch 函数读取本地 JSON 文件?

如果你正在尝试阅读 http://localhost:8080/Reading/api/file

...那么你所做的就是正确的,除了你错过了.ok支票(这是一个很常见的错误,我已经写了一篇关于它的博客文章)。此外,由于您使用的是箭头函数,let vm = this;除非您喜欢,否则不需要这样做箭头函数关闭 this所以:

readJson () {
   // http://localhost:8080
   fetch('/Reading/api/file')
   .then(response => {
       if (!response.ok) {
           throw new Error("HTTP error " + response.status);
       }
       return response.json();
   })
   .then(json => {
       this.users = json;
       //console.log(this.users);
   })
   .catch(function () {
       this.dataError = true;
   })
}

重要的是要记住这是异步的readJson返回之前this.users有值;稍后会得到它如果你想知道它什么时候得到它,返回promise 以便调用代码可以then在它上面使用

readJson () {
   // http://localhost:8080
   return fetch('/Reading/api/file')
   // ...

更多关于这些问题的答案:

如果您尝试/Reading/api/file从文件系统中读取

...那么你不能,至少在某些浏览器中,除非你通过 web 服务器进程提供文件(因为你似乎正在提供页面。然后你通过该服务器进程上的 URL 读取它,如上所示。

要以其他方式读取本地文件,用户必须识别该文件,方法是input type="file"将其选中或拖入拖放区。然后你会通过File API读取它,而不是fetch.

@zzzzBov - 很可能是。我已经修复了答案,再次感谢。
2021-04-30 04:26:17
该示例使它看起来像是在 上提供的http://localhost:8080/Reading/api/file,因此我不确定此答案是否适用。
2021-05-10 04:26:17
@zzzzBov - 我完全错过了来源中的评论,谢谢。但听起来 OP 可能在那里托管页面,但试图读取本地文件,而不是服务器上的文件。
2021-05-10 04:26:17
是的,这当然是模棱两可的。我有一种预感,这是一个“如何从异步调用返回响应?”的骗局。.
2021-05-13 04:26:17

有一个非常简单的Fetch API

您只需通过以下方式使用它:

// Replace ./data.json with your JSON feed
fetch('./data.json').then(response => {
  return response.json();
}).then(data => {
  // Work with JSON data here
  console.log(data);
}).catch(err => {
  // Do something for an error here
});
他们不返回respone.json();
2021-05-02 04:26:17
我想在本地读取 json 文件,或者如果我必须确切地说,必须有一个属性,如果 propertyie = true ,然后加载本地 json 文件(带有转储数据),否则从 tomcat 服务器加载 json 数据
2021-05-06 04:26:17
我通过将 url 明确地定义为 localhost:3000/<path-inside-public-folder> 来实现的。工作了!
2021-05-17 04:26:17
这就是他们正在做的事情,包括您.ok像 OP 一样缺少支票这一事实
2021-05-18 04:26:17
是的,他们这样做。他们使用的是简洁的箭头函数那有一个隐含的return.
2021-05-21 04:26:17