Почему мой PHP эхо показывает пустую строку / массив? - PullRequest
1 голос
/ 04 мая 2020

В настоящее время я работаю над приложением React Native, которое пытается отправить JSON данные на сервер через PHP. Все, что он делает, показывает мне пустую строку, и я не могу понять, почему. Он также показал мне пустой массив, когда я попытался сделать что-то подобное в Android Studio. Вот мой код React Native (это приложение получает широту и долготу с помощью Geolocation и каждые 10 секунд отправляет его на сервер, чтобы другое приложение могло получить данные с сервера и что-то с ним сделать).

В этой функции я пытаюсь сделать запрос POST к серверу:

sendDataToServer = () => {
var data = {
  "lat": this.state.where.latitude,
  "long": this.state.where.longitude
}

fetch('http://....sendData.php', {
  method: 'POST',
  headers: {
    'Accept' : 'application/json',
    'Content-Type' : 'application/json',
  },
  body: JSON.stringify(data)
}).then((response) => {
  return response.json()                            
  })
      .then((responseData) => {

      }).catch((error) => {
        console.error(error);
      });
}

Это функция, которую я вызываю sendDataToServer () из:

geoSuccess = (position) => {
this.setState({
  ready:true,
  where: {latitude: position.coords.latitude, 
          longitude: position.coords.longitude}
});
this.setState({
  TextLat:
    this.state.where.latitude + " ",
  TextLong:
    this.state.where.longitude + " "
});
this.sendDataToServer();
}

А вот мой PHP:

<?php
    $json = file_get_contents('php://input');
    echo json_encode($json);

Все, что он мне дает, это "" в моем PHP, когда я запускаю его. Я не знаю, является ли это json_encode или как я получаю данные или что. Когда я пытаюсь использовать echo json_last_error_msg () после json_encode, он выдает «No error» в моем файле PHP, и мое приложение React Native выдает ошибку «SyntaxError: JSON Parse error: Unable to parse JSON» строка». Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 04 мая 2020

Возможно, что ваше состояние не сохраняется при вызове метода sendDataToServer(), вы можете избежать этого, установив обратный вызов на setState(). Вот упрощенная версия вашего кода:

geoSuccess = (position) => {
  this.setState({
    ready:true,
    where: {
      latitude: position.coords.latitude, 
      longitude: position.coords.longitude
    },
    TextLat: position.coords.latitude + " ",
    TextLong: position.coords.longitude + " "
  }, () => {
    this.sendDataToServer();
  });
}

Вы также можете использовать событие ComponentDidUpdate, дополнительную информацию см. В документации .

Обновление

В коде PHP используйте json_decode:

<?php
  $data = file_get_contents('php://input');
  $json = json_decode($data, true);
  print_r($json);

Опция true означает, что он вернет ассоциативный массив.

Дополнительная информация о json_decode .

...