React-Native 从 URL 获取 JSON 数据

4
我希望你能帮我解决问题。我正在使用React Native,试图从一个名为Feiertage-API(https://feiertage-api.de/)的API获取一些数据,它基本上返回(应该返回)德国的官方假期。尝试在React Native中使用fetch时,会返回:
Response {
   "_bodyBlob": Blob {
     "_data": Object {
       "blobId": "49C4AD4B-4648-44DB-AED7-7654EB78EF7A",
       "name": "api",
       "offset": 0,
       "size": 487,
       "type": "application/json",
     },
   },
   "_bodyInit": Blob {
     "_data": Object {
       "blobId": "49C4AD4B-4648-44DB-AED7-7654EB78EF7A",
       "name": "api",
       "offset": 0,
       "size": 487,
       "type": "application/json",
     },
   },
   "headers": Headers {
     "map": Object {
       "access-control-allow-origin": Array [
         "*",
       ],
       "content-type": Array [
         "application/json",
       ],
       "date": Array [
         "Tue, 31 Jul 2018 07:17:51 GMT",
       ],
       "server": Array [
         "nginx",
       ],
       "x-powered-by": Array [
         "PHP/7.0.31, PleskLin, PleskLin",
       ],
     },
   },
   "ok": true,
   "status": 200,
   "statusText": undefined,
   "type": "default",
   "url": "https://feiertage-api.de/api/?jahr=2019&nur_land=hb",
}

我的fetch调用如下:

fetch('https://feiertage-api.de/api/?jahr=2019&nur_land=hb')
                .then(response => console.log(response) )
                .catch(error => console.log(error));

GET参数是: - jahr=2019(表示年份,我认为这很明显) - nur_land=hb(使用简短的形式指定州)

可以通过添加GET参数“callback=mycallbackname”来获取JSONP

如果尝试使用以下代码显示数据: console.log(response.json())

结果是:

 Promise {
      "_40": 0,
      "_55": null,
      "_65": 0,
      "_72": null,
   }

我希望看到的正是这里所显示的数据 -> https://feiertage-api.de/api/?jahr=2019&nur_land=hb 想知道如何从Response{...}中提取数据。
1个回答

9

你需要在这个响应上调用.json()方法。

fetch('https://feiertage-api.de/api/?jahr=2019&nur_land=hb')
            .then(response => response.json() )
            .then(data => console.log(data) )
            .catch(error => console.log(error));

我靠...我在另一个帖子上看到过这个,但没有成功。现在复制并粘贴了你的解决方案,一切都正常了。非常感谢,我将把这个标记为已接受的答案。 - Sercan Samet Savran
1
需要注意的是,response.json() 返回一个 Promise,因此您必须要么使用 await 等待它完成,要么将其包装在 .then() 中。 - Kaarel Allemann
所以它是异步的,第二个.then命令在第一个命令完成获取所有数据后被调用?这正确吗? - Sercan Samet Savran
正确。只有当任何一个 Promise 失败时,.catch() 才会被调用。 - Harry B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接