При использовании стандартного $http-сервиса в AngularJS и метода передачи POST, PHP не получает $_POST массив в привычном для нас виде. Точнее — он вообще пуст.
AngularJS:
$http.post("/ajax.php", {action: "do_something"});
PHP:
echo count($_POST); // 0
Причина в том, что AngularJS не использует формат данных похожий на GET (Content-Type: x-www-form-urlencoded) как это делает jQuery, а передает данные в виде JSON.
Получить данные на сервере можно следующим образом:
PHP:
$post_data = json_decode(file_get_contents('php://input'), true);