2015-05-05 21 views
8

Piszę małą aplikację na iPhone'a za pomocą reakcji natywnej. Próbuję pobrać dane JSON ze strony internetowej za pomocą pobierania. Tak jak w przykładzie:Jak uzyskać dane JSON z pobierania (reagowanie natywne)

function status(response) { 
    if (response.status >= 200 && response.status < 300) { 
    return response 
    } 
    throw new Error(response.statusText) 
} 

function json(response) { 
    return response.json() 
} 


fetch('/users', { 
    method: 'post', 
    headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }, 
    body: JSON.stringify({ 
    name: 'Hubot', 
    login: 'hubot', 
    }) 
}).then(status) 
    .then(json) 
    .then(function(json) { 
    console.log('request succeeded with json response', json) 
    }).catch(function(error) { 
    console.log('request failed', error) 
    }) 

Wszystko działa dobrze, ale muszę później użyć tych danych. Kiedy próbuję przypisać ją do jakiejś zmiennej w funkcji json, otrzymuję komunikat "Request error", a następnie otrzymuję dane (poprawnie). Jaka jest najlepsza praktyka, aby uzyskać te dane i mieć je w jakiejś zmiennej, aby użyć go później?

Odpowiedz

5

Można utworzyć zmienną w konstruktorze komponentu:

constructor(props) { 
    super(props); 
    this.state = { 
     jsonData: '' 
    } 
} 

Następnie zaktualizować tę zmienną, jeśli potrzebne:

.then((responseData) => { 
    this.setState({ 
     jsonData: responseData 
    }); 
    }) 
+3

w sposób do pamięci, które zwykle mają dwa thens jak poniżej: '.Następnie ((odpowiedź) => { response.text(); console.log (odpowiedź) }) .then ((responseText) => { console.log (responseText); }) .catch ((błąd) => { console.warn (błąd); }) .done(); 'zastanawiałem się, co czy każdy z nich powraca i dlaczego jest zorganizowany w ten sposób? jak oni pracują? –

+1

@KevinZhao: 2 następnie wykonuje się sekwencyjnie, 1. następnie otrzymuje tekst z obiektu odpowiedzi, a drugi służy do drukowania wartości tekstowej. – vignesh

0

w moim przypadku użyłem sails.js z paszportem lokalnej ale jest bardzo podobny do jakiegokolwiek innego framework node.js, aby wychwycić te zmienne, których użyłem do logowania funkcji (req, res), gdzie zmienne są przechowywane w req.body. W twoim przypadku req.body.name będzie zawierał "Hubot", a req.body.login będzie zawierać "hubot'.Response zostanie wysłane za pomocą res.send. sprawdź dokumentację node.js, aby dowiedzieć się więcej.

5

Zrobiłem to w ten sposób. Wyświetlałem odpowiedź na konsoli. Możesz przechowywać dane odpowiedzi w swojej zmiennej stanu lub w pamięci lokalnej, jak chcesz.

doSignUp() { 

    console.log("inside post api"); 
    fetch('your API URL', { 
    method: 'POST', 
    headers: { 
        'Accept': 'application/json', 
        'Content-Type': 'application/json', 

       }, 


     body: JSON.stringify({ 
     password: this.state.password, 
     email:this.state.email, 
     name: this.state.firstname, 
     last_name :this.state.last_name, 
     mobile:this.state.mobile, 
     ssn:"2222222" 

    }) 
     }).then((response) => response.json()) 
     .then((responseData) => { 
           console.log("inside responsejson"); 
           console.log('response object:',responseData) 

     }).done(); 
    }