AngularJSは、jQueryとサーバのやり取り方法が若干異なります。
jQueryでサーバとやり取り
jQueryであれば
$.ajax({
type:"post",
dataType:'json',
url:'ファイルのパスURL.php'
}).done(function(data , textStatus , jqXHR){
console.log("通信OK");
}).fail(function(jqxhr, status, error){
console.log("失敗したよ");
});
という書き方で動いてました。
セイムオリジンポリシー(same origin policy)とかいう面倒な縛りのため、サーバ側は
<?php
header("Access-Control-Allow-Origin: *");
?>
という記述が先頭行に必要です。ただしこれはどのドメインからもアクセスを許可する意味なので、使いドコロは注意が必要かもしれません。
Angular JSでサーバとやり取り
対して、Angular JSでは次のようになります
.config(function( $httpProvider) {
//サーバ接続に必要なお作法
$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;application/json;charset=utf-8';
//略
まず、configの中で$httpprovider.defaults.headers.postという長いプロパティに値をセットします。これが無いと、通信に失敗して
XMLHttpRequest cannot load http://ファイルのパス Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.
というエラーが表示されます。jQueryではこの記述が不要だったので、最初よくわかりませんでした。
Angular JSでデータをPOST
実際にサーバへデータを送るには次のようになります
$scope.myfunc = function(){
var parameter = {};
parameter.hoge = 'abc';
parameter.moge = 'xyz';
$http({
method : 'POST',
url:'http://localhost/ファイルのパス.php',
data: parameter
}).success(function(data, status, headers, config) {
console.log("コネクションOK");
console.log(data);
}).error(function(data, status, headers, config) {
console.log("コネクション失敗");
});
}
サーバに渡す変数を2つ用意しました。一つは hogeで、値はabcですもう一つはmogeで、値はxyzです。
Angular JSからPOSTされたデータをPHPで処理
ここからはPHP側になります。$_POSTで受け取ることが出来ないので、少し工夫が必要です
<?php
header("Access-Control-Allow-Origin: *");
header('Content-type:application/json; charset=UTF-8');
$data = json_decode(file_get_contents('php://input'),true);
echo json_encode($data);
?>
Angular JSではページ遷移が無いので、PHPの返す値はGoogle chromeのデベロッパー画面から値が確認します

PHPの$POSTが参照できない件
AngularJSでPOSTした値は、PHPの$POSTで参照することが出来ないようです。
なんでも勝手にJSON式に変換されて送られるらしいので、json_decodeで展開する必要があります。
jQueryに慣れきってしまっていると、AngularJSはときどき落とし穴があるので気をつけたいですね。

