我正在使用react native为iPhone编写小应用程序。我正在尝试使用fetch从网站获取JSON数据。就像在例子中一样:
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)
})
一切正常但我需要稍后使用这些数据。当我尝试将它分配给json函数中的某个变量时,我得到“请求错误”,然后获取数据(正确)。获取数据并将其放在某个变量中以便以后使用它的最佳做法是什么?
答案 0 :(得分:6)
您可以在组件的构造函数中创建变量:
constructor(props) {
super(props);
this.state = {
jsonData: ''
}
}
然后在需要时更新此变量:
.then((responseData) => {
this.setState({
jsonData: responseData
});
})
答案 1 :(得分:6)
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();
}
答案 2 :(得分:1)
亲爱的朋友,这很简单
首先,如您所知,每个请求都会返回标题和正文
当我们使用获取时
标题请求的默认响应。
如果我们需要正文请求,那就足够response.json()
return fetch(url,{
method: 'POST',//GET and ...
headers:{
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
elm: "elm" //is fake
})
})
.then((response)=>response.json()) // <------ this line
.then((response)=>{
return response ;
});
如果您的请求的正文是 html dom ,请使用此response.text()
如果您想要返回标题,则无需执行任何操作,只需添加此行.then((response)=>response.json())
答案 3 :(得分:0)
在我的情况下,我使用了带本地护照的sails.js,但它与任何其他node.js框架非常相似,用于捕获我用于登录函数(req,res)的变量,其中变量存储在req中。身体。在你的情况下,req.body.name将包含'Hubot',req.body.login将包含'hubot'.Response将使用res.send发送。查看node.js文档以获取更多详细信息。
答案 4 :(得分:0)
我是这样的
这是按钮
<Button onPress={this._onPressButton} accessibilityLabel="tap!!!" />
这是动作
_onPressButton() {
return fetch('https://facebook.github.io/react-native/movies.json')
.then((response) => response.json())
.then((responseJson) => {
console.log(responseJson.movies);
})
.catch((error) => {
console.error(error);
});
}
结果
[14:30:19] Array [
[14:30:19] Object {
[14:30:19] "id": "1",
[14:30:19] "releaseYear": "1977",
[14:30:19] "title": "Star Wars",
[14:30:19] },
[14:30:19] Object {
[14:30:19] "id": "2",
[14:30:19] "releaseYear": "1985",
[14:30:19] "title": "Back to the Future",
[14:30:19] },
[14:30:19] Object {
[14:30:19] "id": "3",
[14:30:19] "releaseYear": "1999",
[14:30:19] "title": "The Matrix",
[14:30:19] },
[14:30:19] Object {
[14:30:19] "id": "4",
[14:30:19] "releaseYear": "2010",
[14:30:19] "title": "Inception",
[14:30:19] },
[14:30:19] Object {
[14:30:19] "id": "5",
[14:30:19] "releaseYear": "2014",
[14:30:19] "title": "Interstellar",
[14:30:19] },
[14:30:19] ]
[14:30:19] Array [
[14:30:19] Object {
[14:30:19] "id": "1",
[14:30:19] "releaseYear": "1977",
[14:30:19] "title": "Star Wars",
[14:30:19] },
[14:30:19] Object {
[14:30:19] "id": "2",
[14:30:19] "releaseYear": "1985",
[14:30:19] "title": "Back to the Future",
[14:30:19] },
[14:30:19] Object {
[14:30:19] "id": "3",
[14:30:19] "releaseYear": "1999",
[14:30:19] "title": "The Matrix",
[14:30:19] },
[14:30:19] Object {
[14:30:19] "id": "4",
[14:30:19] "releaseYear": "2010",
[14:30:19] "title": "Inception",
[14:30:19] },
[14:30:19] Object {
[14:30:19] "id": "5",
[14:30:19] "releaseYear": "2014",
[14:30:19] "title": "Interstellar",
[14:30:19] },
[14:30:19] ]