我是新手,尝试使用 fetch 方法执行 http 请求(也尝试过 axios(。我正在使用PHP作为后端。我正在尝试在反应本机中打印从服务器返回的 JSON 对象。
我确定响应是从服务器返回的,因为我打印了结果,它是一个 JSON 数组。但是当我使用 Chrome 开发工具安慰responseData
时,我得到了这个[]
.我不知道错误在哪里。
索引.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是脚本如下
结果.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"}]
尝试使用 axios。您可以在此处查看文档 完成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 的 URL,以便我查看。
检查您的 PHP API,如果对象返回空,请确保对 json 进行编码。这是您可以尝试的示例
$myObj->name = "Michel Arteta";
$myObj->age = 30;
$myObj->city = "New York";
$myJSON = json_encode($myObj);
echo $myJSON;
你的网址是http
吗?你在IOS上试穿吗?
(如果是,您需要将您的域添加到XCode中的白名单中(
默认情况下,iOS 将阻止任何未使用 SSL 加密的请求。如果需要从明文 URL(以 http 开头的 URL(提取,则首先需要添加应用传输安全例外。如果您提前知道需要访问哪些域,则仅为这些域添加例外会更安全;
我已经解决了这个问题。问题出在反应部分。我试图获取在不同页面中返回的此响应。实际上,从服务器返回的响应是正确的。