dongsu3654 2014-01-06 23:42
浏览 79
已采纳

PHP解析JSON字符串

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?

  • 写回答

2条回答 默认 最新

  • dongtaoxue4674 2014-01-06 23:47
    关注

    $_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');
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • dongzheng7165 2014-01-08 11:06
    关注

    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;
        });
    }
    
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 机器人MATLAB仿真示教占内存过大
  • ¥15 JSR233已经使用但是仍无法将csv数据放到一个list里显示出来,如何解决?
  • ¥15 I350 Gigabit Network
  • ¥15 关于#abap#的问题,请各位专家解答!
  • ¥20 内网通过公网访问外网问题
  • ¥20 谁有这个东西 继续教育的
  • ¥15 怎么使请求通过cors
  • ¥15 WDM 驱动ACPI 相关疑问
  • ¥15 LQR的状态空间方程不标准以及代价函数中为状态量的运算,如何处理?
  • ¥15 prism 跨窗体共享数据绑定 wpf