我是新手,尝试使用fetch方法(也尝试过axios)来尝试执行http请求。我正在使用PHP作为后端。我正在尝试的是打印从本机响应的服务器返回的JSON对象。
我确定响应是从服务器返回的,因为我打印了结果,它是一个JSON数组。但是当我使用Chrome开发工具安慰responseData
时,我得到了[]
。我不知道错误在哪里。
index.js
componentDidMount(){
fetch('http://xxxxxxxxxx/result.php', {
method: 'GET',
}).then(response =>response.json())
.then((responseData) =>
{
console.log(responseData);
this.setState({
user: (responseData.name),
loaded:true,
})
});
}
render(){
return(
<Card>
<CardTitle style={styles.containerStyle} title={this.state.user} />
</Card>
);
}
}
另外我的php是脚本如下
result.php
<?php
include 'db.php';
$check_json = file_get_contents('php://input');
$obj1= json_decode($check_json);
$uid =$obj1->{'uuid'};
$blood = $obj1->{'bloodgroup'};
$loc = $obj1->{'place'};
$prep =$mysqli->prepare("select token,name,uuid from signup where location
like '".$loc."%' and bloodgroup= ?");
$prep->bind_param("s",$blood);
$prep->execute();
$result= $prep->get_result();
$payload= array();
while($row= $result->fetch_array(MYSQL_ASSOC)){
$payload[]= array('name' =>$row['name']
'uuid' =>$row['name']);
}
$obj2 =json_encode($payload);
echo $obj2;
?>
并且来自服务器的响应是
[{"name":"angel","uuid":"b4b8a266-60cf-4e30-a778-596316d1a4a2"}]
答案 0 :(得分:1)
尝试使用axios。您可以查看文档here完成npm install axios
并将axios导入组件后,您可以尝试:
componentDidMount(){
axios
.get('https://www.your-url.com/path-to-your-php-api')
.then(({ data })=> {
this.setState({
user: data.name
});
})
.catch((err)=> {})
}
如果您仍有问题,请发布返回JSON的网址,以便我查看。
检查您的PHP API,如果对象返回空,请确保编码json。以下是您可以尝试的示例
$myObj->name = "Michel Arteta";
$myObj->age = 30;
$myObj->city = "New York";
$myJSON = json_encode($myObj);
echo $myJSON;
答案 1 :(得分:1)
您的网址是http
吗?你试试IOS吗?
(如果是,您需要将您的域名添加到XCode中的白名单)
默认情况下,iOS会阻止任何未使用SSL加密的请求。如果需要从明文URL(以http开头的URL)获取,则首先需要添加App Transport Security异常。如果您提前知道需要访问哪些域,则为这些域添加例外更安全;
答案 2 :(得分:1)
我已经解决了这个问题。问题在于反应部分。我正在尝试获取在不同页面中返回的此响应。实际上,从服务器返回的响应是正确的。