読み込むWebAPIには、https://api.loctouch.com/v1/railway/stations?line_cd=11302を使用しています。
外部サーバーにあるJSONの場合は、JSONPでクロスドメイン通信というやり方で呼び出す。
そして、コールバック関数にJSON_CALLBACKをつけないといけない。
AngularJSでのJSONP読み込みサンプル
<!DOCTYPE HTML> <html ng-app="myApp" lang="ja"> <head> <meta charset="utf-8"> <title>Angular JSON Get Sample</title> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script> <script> var app = angular.module('myApp', []); app.factory('WebApi', function($http){ var jsonData = {}; jsonData.getFeedId = function(callback){ $http.jsonp('https://api.loctouch.com/v1/railway/stations?line_cd=11302&callback=JSON_CALLBACK') .success(function(data){ callback(data); }) .error(function(){ alert('APIデータ取得失敗'); }); } return jsonData; }); app.controller('MainController', ['$scope', 'WebApi', function($scope, WebApi){ WebApi.getFeedId(function(data){ $scope.items = data.stations; }); }]); </script> </head> <body ng-controller="MainController"> <ul> <li ng-repeat="value in items"> {{value.line_name}} {{value.spot_station_name}} </li> </ul> </body> </html>
もし、提供されたWebAPIではなく、自分で作成したJSONファイルを、外部サーバーから読み込みたいという場合は以下のように、JSONを設置しているサーバー上に新しくphpファイルを作成して、phpからJSONを呼び出すようにする。
<?php header("Access-Control-Allow-Origin: *"); // クロスドメイン通信の許可 $json = file_get_contents('./sample.json'); // 読み込むJSONファイルを指定 header('Content-Type: text/javascript; charset=utf-8'); echo $_GET['callback'] . '('. $json .')'; ?>
例えば、上記のphpをsample.phpという名前で作成した場合、呼び出しURIは以下のような感じになる。
$http.jsonp('http://www.example.com/sample.php?callback=JSON_CALLBACK')