fetch response.json()给出responseData = undefined

时间:2015-10-20 12:52:23

标签: react-native

使用fetch时:

  fetch(REQUEST_URL, {
      method: 'get',
      dataType: 'json',
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      }
    })
    .then((response) => 
      {
        response.json() // << This is the problem
      })
    .then((responseData) => { // responseData = undefined

        console.log(responseData);
     });
     }).catch(function(err) {
        console.log(err);
      })
     .done();

以下作品有效,你知道为什么吗? :

    JSON.parse(response._bodyText)

6 个答案:

答案 0 :(得分:35)

抓取有点难以理解。我是新来的,所以不要把我击倒如果火焰在这里,但响应数据是另一个承诺,你需要返回响应数据然后处理该承诺与另一个然后声明,你可以最终记录响应,也是你缺少一些回报你的承诺中的陈述:

var makeRequest = function(){

    fetch('https://jsonplaceholder.typicode.com/posts/1', {
        method: 'get',
        dataType: 'jsonp',
        headers: {
           'Accept': 'application/json',
           'Content-Type': 'application/json'
        }
    })
    .then((response) => {
       return response.json() // << This is the problem
    })
    .then((responseData) => { // responseData = undefined
        addTestToPage(responseData.title);
        return responseData;
    })
  .catch(function(err) {
      console.log(err);
  })
}

function addTestToPage(textToAdd){
   var para = document.createElement("p");
   var node = document.createTextNode(textToAdd);
   para.appendChild(node);

  var element = document.getElementsByTagName("body")[0];
  element.appendChild(para);
}

makeRequest();

希望有助于查看:https://jsfiddle.net/byz17L4L/

答案 1 :(得分:35)

链接响应应该更像这样,特别是response.json部分。然后,您应该在Object中找到console.log

.then(response => response.json())
.then(response => {

console.log(response);  

答案 2 :(得分:9)

以下是我的案例中最终解决的问题:

fetch('http://localhost:3001/questions', {
        method: 'GET',
        headers: {
        "Accept": "application/json",
        'Content-Type': 'application/json'
        }
    })
    .then(response => { return response.json();})
    .then(responseData => {console.log(responseData); return responseData;})
    .then(data => {this.setState({"questions" : data});})

    .catch(err => {
        console.log("fetch error" + err);
    });
}

答案 3 :(得分:8)

因为你没有在第一个时间内返回response.json()。

答案 4 :(得分:0)

import React, {useEffect} from 'react';

useEffect(() => {
    getRecipes();
  }, []);

  const getRecipes = async () => {
    const response = await fetch(
      `https://........`
    );
    const data = await response.json();
    console.log(data);

  • 使用此方法,您可以轻松添加数据。

答案 5 :(得分:-3)

fetch(weatherIng + zipCode +apiKey)
        .then(response => response.json())

      .then(response => {
     console.log(response.main);
     this.setState({
       weather: ((response.main.temp * (9/5))-459.67).toFixed(0),
       humidity:((response.main.humidity * (9/5))-459.67).toFixed(0)
     })

如果你没有将它自己包含在内,它会认为你正在尝试声明一些东西:

  .then(response => {
     console.log(response.main);
     }) . " around the this.setState