LoginSignup
3
4

More than 5 years have passed since last update.

AngularJS+PHPでレスポンスを取得する

Last updated at Posted at 2018-01-07

こんにちは。

今日は、Webシステムを作る為の事前調査を下記の構成で実施しました。

■目的
AngularJS(HTML,JavaScript)で記載されたリクエストに対して、PHP(サーバサイド)からレスポンスを返却し
HTMLに表示させる。

データはJSON形式を用いる。

■環境
XAMPP

■利用言語
 サーバ
  PHP(Ver7.x系)
 クライアント
  HTML5
  AngularJS(1.6系)

1.環境設定
 XAMPPをインストール
 Apacheのポート切替(利用ポートがSkypeと重複していた為)
 Atom Live Server(HTML動作確認用)のインストール

2.コーディング
・index.html

<html ng-app="myApp">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<head>

  <!-- vendor -->
<script src="./js/vendor/angular.js"></script>

<!-- original -->
<script src="./js/controller/index.js"></script>

<title>test</title>
</head>
<body ng-controller="IndexController">
  <!-- page start -->
データ:{{data}}<br>
名前:{{name}}<br>
性別:{{gender}}<br>
趣味:{{shumi}}<br>
特技:{{tokugi}}<br>

</body>
</html>

・index.js

var app = angular.module('myApp',[]);
app.controller('IndexController',['$scope','$rootScope','$http',function($scope,$rootScope,$http){
$rootScope.serverUrl='http://localhost:8081/blg_server/blg_server.php/';
// http post start
  $http.post($rootScope.serverUrl + 'test1'
  // ,{headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}}
  )
  .then(function onSuccess(response){
      var data = angular.fromJson(response);
      console.table(response);
      $scope.data = response;
      $scope.name = data.data.name;
      $scope.gender = data.data.gender;
      $scope.shumi = data.data.detail.shumi;
      $scope.tokugi = data.data.detail.tokugi;
    });
}]);

・サーバのphpファイル

<?php
// CROSS ORIGIN
if (array_key_exists('HTTP_ORIGIN', $_SERVER)) {
    $http_origin = $_SERVER['HTTP_ORIGIN'];
}
else if (array_key_exists('HTTP_REFERER', $_SERVER)) {
    $http_origin = $_SERVER['HTTP_REFERER'];
} else {
    $http_origin = $_SERVER['REMOTE_ADDR'];
}
header("Access-Control-Allow-Origin: $http_origin");

// dispatch start
// params parse
$params = array();
if('' != $_SERVER['REQUEST_URI']){
  $params = explode('/', $_SERVER['REQUEST_URI']);
}
// param get
$controller='index';
if(0<count($params)){
  $controller = $params[3];
}
// dispatch exec
  switch ($controller) {
    case 'index':
      echo 'とっぷ';
      break;

      case 'test1':
      $arr = array(
        'name'=>'太郎',
        'gender'=>'男',
        'detail'=>array(
          'shumi'=>'釣り',
          'tokugi'=>'野球',
        ),
      );
      $json = json_encode($arr
       , JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
      );
      echo $json;
        break;

      case 'test2':
        echo 'テスト2';

    default:
      echo 'その他だよ';
      break;
  }

 ?>

3.配置
C:\xampp\htdocs\
(phpMyAdminのデフォルトのディレクトリがここらしい)にphpファイルを配置

4.Apacheサーバ起動

5.動作確認
/(phpファイル)/test1を直接叩いた時のレスポンス
■localhost:(設定したポート番号)/(phpファイル)/test1をブラウザで叩く

{ "name": "太郎", "gender": "男", "detail": { "shumi": "釣り", "tokugi": "野球" } }

HTMLファイル上の動作確認
■localhost:(Atom Live Serverで起動したポート番号)/index.html

データ:{"data":{"name":"太郎","gender":"男","detail":{"shumi":"釣り","tokugi":"野球"}},"status":200,"config":{"method":"POST","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"http://localhost:8081/blg_server/blg_server.php/test1","headers":{"Accept":"application/json, text/plain, /"}},"statusText":"OK","xhrStatus":"complete"}
名前:太郎
性別:男
趣味:釣り
特技:野球

以上の流れで、AngularJS上からPOST通信でリクエストを送り、とりあえずPHP上からレスポンスを返却することが出来ました。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4