2016-07-21 54 views
1

我正在使用谷歌地圖API,我需要保持最後的中心和縮放級別,每次我重新加載頁面。谷歌地圖 - 如何添加參數到函數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> 

另一種選擇是個Ëloader of the JSAPI,在那裏你必須定義一個函數引用(而不是函數名)的選項,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(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建議)或甚至cookie來存儲它,並在需要時從客戶端讀取它。