2014-01-06 6 views
2

У меня возникли проблемы с передачей некоторой информации из моего кода Angularjs в мой PHP-код для обработки.PHP parsing JSON string

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 представляет собой массив пар ключ => значение

Вы ищете для всего тела POST в виде строки. Используйте это:

$dropString = http_get_request_body(); 

Edit: Если это не работает, используйте

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

. Можете сделать заметку о том, что это доступно только в 'pecl_http', иначе просто используйте' file_get_contents (' php: // input ') ' – Phil

+0

Хороший вызов, @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; 
    }); 
}