2011-09-11 25 views
0

這個代碼工作時,我pos任何時間後被定義,然後繼續。但是當我運行它通常它不顯示任何東西。我究竟做錯了什麼?谷歌地圖API工作,當我休息然後繼續,否則不

function initialize() { 

    var pos; 

    if(navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function(position) { 

      pos = new google.maps.LatLng(position.coords.latitude, 
              position.coords.longitude); 
     }, function() { 
       handleNoGeolocation(true); 
      }); 
    } 
    else { // Browser doesn't support geolocation 
     handleNoGeolocation(false); 
    } 

    var myOptions = { 
     zoom: 7, 
     center: pos, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"), 
             myOptions); 

} 

回答

1

getCurrentPosition(f, ...)是異步的,這意味着回調f在成功完成請求後稍後調用。但此時功能中的局部變量pos不在範圍內。

您可以通過在全局窗口範圍中定義pos來解決問題。這應該會起作用,pos將由回調分配。但是,你不知道這個任務何時發生。處理這個問題的最好方法是直接在回調中使用pos,例如將其寫入文本字段或將其存儲在數據庫中等。

0

也許API調用需要一點時間,當它打破它時,獲取一點時間來檢索它需要的任何數據,以便它能夠顯示它?這只是猜測,但你可以試着拖延,看看會發生什麼。

1

有趣。你有錯誤嗎?你可以分享嗎?您可能還想使用console.log()進行調試,並將try/catch塊封裝起來。我認爲你可能在一些較舊的瀏覽器中遇到了一些問題。

+0

我沒有收到任何錯誤。我也在使用最新的Safari。與Chrome相同的行爲。奇怪。 – Ferguzz