Данные отправляются через $ http в файл php, но JSON декодирует пустой или неопределенный? - PullRequest
0 голосов
/ 30 мая 2019

Я использую $ http через AngularJS для отправки данных в документ PHP, который предназначен для сохранения данных в базе данных MySQL. Однако данные декодируются пустыми или неопределенными. JSON попадает в файл PHP, поскольку я вижу заголовки запроса, но ответ пуст.

Я пытался протестировать различные варианты кода, чтобы убедиться, что данные в кодировке JSON попадают в документ PHP, и делает, но при попытке json_decode() он ничего не извлекает из JSON.

PHP-файл

$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
$user = $request->Username;
echo $user;

AngularJS

$scope.submit = function() {
        $http({
            url: "http://www.walkermediadesign.com/planner3/src/ceremony.php",
            method: "POST",
            data: this.ceremony
        }).then(function successCallback(response) {
            console.log(response.data);
        }, function errorCallback(response) {
            $scope.error = response.statusText;
    })};

Это почтовые данные:

$postdata = 
(2) [{…}, {…}]
0: {Username: "redphyre@gmail.com"}
1: {opening: "Friends and Family of BRIDE and GROOM, welcome and…d 
falling in love with each other all over again."}
length: 2
__proto__: Array(0)

Нет сообщений об ошибках или 500 ошибок, просто возвращаются пустые данные.

1 Ответ

1 голос
/ 30 мая 2019

Я думаю, вы ожидали, что данные JSON будут выглядеть следующим образом:

{
    "Username": "redphyre@gmail.com",
    "opening": "Friends and Family..."
}

Где у вас есть один объект со всеми ожидаемыми свойствами.

Однако то, что вы на самом деле получаете,это:

[
    { "Username": "redphyre@gmail.com" },
    { "opening": "Friends and Family..." }
]

Это создает массив объектов, каждый из которых имеет только одно свойство, с которым работать не так просто.Чтобы преобразовать данные в один объект с несколькими свойствами, вы можете выполнить цикл с помощью набора результатов:

$responseData = new stdClass();

foreach ($response as $propertyObject) {
    $properties = get_object_vars($propertyObject);

    // Just in case some objects have more than one property after all
    foreach($properties as $name => $value) {
        $responseData->$name = $value;
    }
}

Это скопирует отдельные свойства объектов в массиве ответа в один объект.

...