jaydubyasee
jaydubyasee

Reputation: 113

PHP parsing JSON string

I'm having great trouble passing some information from my Angularjs code to my PHP code for processing.

JS

Controller

var dataString = '{"round": {"number": 1,"drops": [{"pos": "0","cust": 1025}]}}';
dropService.updateDrops(dataString)
    .success(function(data) {
        console.log(data);
})

Service

updateDrops : function(drops) {
        return $http({
            url: "/app/php/update_rounds.php",
            method: "POST",
            data: drops,
            headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        });
    }

PHP

$dropString = $_POST;

$dropArray = json_decode($_POST);
$a = $dropArray->{"round"}->{"number"};

echo "Round = ".$a;

What I expect to see on the console is

Round = 1

but what I get is

Round =

Obviously something is going screwy. However if I replace

$dropString = $_POST;

with

$dropString = '{"round": {"number": 1,"drops": [{"pos": "0","cust": 1025}]}}';

everything works out just fine so I know that the PHP will work if I can just get the right data to it. Where am I going wrong?

Upvotes: 2

Views: 107

Answers (2)

MirekH
MirekH

Reputation: 5666

This is my working example with use Angular,PHP and MySQL. I use JSON to communicate between controller and PHP dataset file. my example on GitHub

Start reading from: controllers.js

Most interesting line (in this case) is in file 'controllers.js' line 54-63. Listed bellow:

$scope.updateTable = function() {
    $http({
        url: 'phpcode/dataset1.php',
        method: 'GET',
        params: {table: $scope.choice, index: $scope.index, viewingSize: $scope.viewingSize, sort: $scope.sortChoice},
    }).success(function(data) {
        $scope.rows = data.rows;
        $scope.columns = data.columns;
    });
}

Upvotes: 0

Tommy Crush
Tommy Crush

Reputation: 2800

$_POST is an array of key=>value pairs

You're looking for the entire POST BODY as a string. Use this:

$dropString = http_get_request_body();

Edit: If that doesn't work, use

$dropString = file_get_contents('php://input');

Upvotes: 2

Related Questions