「Googleマップの吹き出しをタブ形式で表示する」の中で、東京近郊レジャースポット案内というAjaxアプリを作りましたが、さらにレジャースポットの定義を別のファイルに移動し、データとWEBページを分離してみました。↓こんな感じです。
WEBページのJavaScriptコードにあったレジャースポットの定義を…
var spots = [ // {lat: 緯度, lng: 経度, url: ブックマークURL} {lat: 35.660347, lng: 139.729121, url: [ 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1510', 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1789' ]}, // 六本木ヒルズ …途中、省略… ];
次のように、WEBページとは別のテキストファイルに移動してアップロードします。ここではファイル名を「googlemapsjson.txt」としました。
googlemapsjson.txt
[ {lat: 35.660347, lng: 139.729121, url: [ 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1510', 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1789' ]}, {lat: 35.665246, lng: 139.712319, url: [ 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1556', 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1790' ]}, {lat: 35.634017, lng: 139.878595, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1557'}, {lat: 35.705646, lng: 139.751887, url: [ 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1569', 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1791' ]}, {lat: 35.639511, lng: 139.760170, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1570'}, {lat: 35.673770, lng: 139.762745, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1577'}, {lat: 35.707127, lng: 139.753046, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1578'}, {lat: 35.664915, lng: 139.762487, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1579'}, {lat: 35.621966, lng: 139.750750, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1580'}, {lat: 35.654995, lng: 139.796476, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1581'}, {lat: 35.664897, lng: 139.766908, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1586'}, {lat: 35.658639, lng: 139.745407, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1587'}, {lat: 35.689492, lng: 139.691699, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1588'}, {lat: 35.672428, lng: 139.755728, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1589'}, {lat: 35.676368, lng: 139.699359, url: 'http://ranger.labs.goo.ne.jp/rpc/partsview.php?key=1590'} ]
WEBページのロードが完了したタイミングで、レジャースポットの定義をAjax.Request(prototype.js)を使って取得します。
function load() { var map = new GMap2(document.getElementById('map')); map.addControl(new GSmallMapControl()); map.addControl(new GMapTypeControl()); map.addControl(new GOverviewMapControl()); map.setCenter(new GLatLng(35.686302, 139.74575), 12);
Ajax.Requestの引数には前述の「googlemapsjson.txt」を指定します。そして、その「googlemapsjson.txt」を取得して、その取得したテキストをJavaScriptとして評価します。また失敗したときは、エラーメッセージを表示して終了します。
var request = new Ajax.Request('googlemapsjson.txt', { method: 'get', asynchronous : false }).transport; if (request.status!=200) return alert(request.status+' '+request.statusText); var spots = eval('('+request.responseText+')');
以降は今までどおり、レジャースポットの定義にしたがって地図上にマーカーを配置していきます。
for (var i=0; i<spots.length; i++) map.addOverlay(createMarker(spots[i])); }