React本机http获取请求无效

时间:2017-11-10 06:09:47

标签: javascript php json react-native fetch

我是新手,尝试使用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"}]

3 个答案:

答案 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)

我已经解决了这个问题。问题在于反应部分。我正在尝试获取在不同页面中返回的此响应。实际上,从服务器返回的响应是正确的。