2016-07-21 12 views
1

Googleマップapiを使用しています。ページをリロードするたびに、最後のセンターとズームレベルを維持する必要があります。Googleマップ - 関数initMapにパラメータを追加するにはどうすればよいですか?

私はPHP変数でこのパラメータを持っていますが、initMapの機能をどのように変更してこれらのパラメータを渡すことができますか?

<script src="https://maps.googleapis.com/maps/api/js?key=*******&callback=initMap" async defer></script> 
+1

あなたのコードの一部を共有する –

+2

私は 'sessionStorage'を使うことをお勧めします - すべてではないにしてもほとんどの現代のブラウザでサポートされており、データの読み書きが容易です – RamRaider

答えて

-1

あなたは(あなたがマップ-APIをロード少なくともない道を経由して)コールバックに引数を渡すことはできません

問題は、我々は機能をこのように呼んでいるということです回避策:あなたはcallbackでそれらにアクセスできるようになります、スクリプト・タグの属性などのパラメータを格納します。

<?php 
    //your parameters, defined in PHP 
    $goo=array('zoom'=>14,'center'=>array('lat'=>52.549,'lng'=>13.425)); 
?> 
<div id="map_canvas"></div> 
<script> 
function initMap(){ 

    var opts = { 
         zoom: 0, 
         center: new google.maps.LatLng(0,0), 
         mapTypeId: google.maps.MapTypeId.ROADMAP 
        }, 
     script= document 
     .querySelector('script[src^="https://maps.googleapis.com/maps/api/js"][data-goo]'), 
     custom; 

     if(script){ 
     custom=JSON.parse(script.getAttribute('data-goo')); 
     for(var k in custom){ 
      opts[k]=custom[k]; 
     } 
     } 
     map = new google.maps.Map(document.getElementById('map_canvas'), 
      opts); 
} 
</script> 

<script data-goo="<?php echo htmlentities(json_encode($goo));?>" 
     src="https://maps.googleapis.com/maps/api/js?callback=initMap&key=***" async defer> 
</script> 

別のオプションは、番目のだろうあなたはcallbackとして(代わりに、関数名の)関数の参照を定義するオプション持つ電子loader of the JSAPI、:それは最初に目的のデータ(最後のズーム/中央)音として、しかし

<?php 
    //your parameters, defined in PHP 
    $goo=array('zoom'=>14,'center'=>array('lat'=>52.549,'lng'=>13.425)); 
?> 
<div id="map_canvas"></div> 
<script> 
function initMap(params){ 

    var opts = { 
         zoom: 0, 
         center: new google.maps.LatLng(0,0), 
         mapTypeId: google.maps.MapTypeId.ROADMAP 
        }; 

     for(var k in params){ 
      opts[k]=params[k]; 
     } 

     map = new google.maps.Map(document.getElementById('map_canvas'), 
      opts); 
} 
</script> 

<script src="https://www.google.com/jsapi"></script> 
<script> 
    google.load('maps', 
       '3', 
       { other_params :'key=***', 
        callback : (function(params){return function(){initMap(params);}}) 
           (<?php echo json_encode($goo);?>) }); 
</script> 

が可能ですclientSideでは、serverSideに格納する理由はありません。 sessionStorage(@RamRaiderの示唆)またはクッキーを介して保存し、必要なときにクライアントから読み取ります。

関連する問題