2014-01-06 201 views
2

我在将Angularjs代码中的一些信息传递给我的PHP代码进行处理时遇到了很大的麻烦。PHP解析JSON字符串

JS

控制器

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

服务

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; 

我希望看到在控制台上是

回合= 1

但我得到的是

回合=

显然有些事情正在发生扭曲。但是如果我更换

$dropString = $_POST; 

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

一切顺利就好了,所以我知道,如果我可以得到正确的数据,它的PHP将工作。我哪里错了?

+1

'$ _POST'是一个包含所有发布值的PHP数组。尝试'var_dump($ _ POST);'检查你的数据在你的AJAX请求中使用或提供的数据,你特别使用 – kero

回答

2

$ _ POST为key => value对

您正在寻找的整个POST BODY作为一个字符串数组。使用此:

$dropString = http_get_request_body(); 

编辑:如果不能正常工作,使用

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

可能要记下这只在'pecl_http'中可用,否则只需使用'file_get_contents(' php:// input')' – Phil

+0

Good call,@Phil。 –

0

这与使用角度,PHP和MySQL我的工作示例。我使用JSON在控制器和PHP数据集文件之间进行通信。 my example on GitHub

开始阅读:controllers.js

最有趣的线(在这种情况下)是在文件 'controllers.js' 线54-63。 列出的波纹管:

$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; 
    }); 
}