これは AngularJS の一般的な問題です。
最初のステップは、 POSTリクエストのデフォルトのcontent-typeヘッダーを変更することです。
$http.defaults.headers.post["Content-Type"] =
"application/x-www-form-urlencoded; charset=UTF-8;";
次に、XHR リクエスト インターセプターを使用して、ペイロード オブジェクトを適切にシリアル化する必要があります。
$httpProvider.interceptors.push(['$q', function($q) {
return {
request: function(config) {
if (config.data && typeof config.data === 'object') {
// Check https://gist.github.com/brunoscopelliti/7492579
// for a possible way to implement the serialize function.
config.data = serialize(config.data);
}
return config || $q.when(config);
}
};
}]);
このようにして、ペイロード データは$_POST配列で再び利用できるようになります。
XHR インターセプターの詳細については、 を参照してください。
もう 1 つの可能性として、デフォルトのcontent-typeヘッダーを維持し、サーバー側でペイロードを解析します。
if(stripos($_SERVER["CONTENT_TYPE"], "application/json") === 0) {
$_POST = json_decode(file_get_contents("php://input"), true);
}