2013-07-27 97 views
0

我已經創建了一個腳本,可以根據您點擊鼠標的區域在地圖上放置一個標記。一旦放置了標記,當鼠標懸停在標記上時,信息框應顯示標記放置位置的地址。但是,信息框沒有顯示出來,因爲當我調用「info_text」時,它返回undefined。我意識到我需要添加一個回調函數,但我認爲我沒有正確實現它。任何人都可以幫我修復我的代碼嗎?由於回調函數不起作用

我的代碼:

var geocoder; 

function initialize() 
{ 

    geocoder = new google.maps.Geocoder(); 
    var event = google.maps.event.addListener; 

    // intializing and creating the map. 
    var mapOptions = { 
    zoom: 4, 
    center: new google.maps.LatLng(-25.363882, 131.044922), 
    mapTypeId: google.maps.MapTypeId.TERRAIN 
    }; 

    var map = new google.maps.Map(document.getElementById('map'), 
     mapOptions); 

    event(map,'click',function(e){ 
    var marker = placeMarker_and_attachMessage(e.latLng,map,count); 
    count = count + 1; 
    }); 

} // end of initalize. 

function placeMarker_and_attachMessage(position,map) 
{ 
    var event = google.maps.event.addListener; 
    var message = ['This', 'is', 'the', 'secret', 'message']; 

    var marker = new google.maps.Marker({ 
     position: position, 
     map: map 
    }); 

    var pos = info_text(position); 
    alert('pos is: ' + pos); 

    var infowindow = new google.maps.InfoWindow({ 
      content: 'hello' 
     }); 

    event(marker,'mouseover',function(){ 
     infowindow.open(map,this); 
    }); 

    event(marker,'mouseout',function(){ 
     infowindow.close(); 
    }); 

} // end of function. 

function info_text(position) 
{ 
    var lat = parseFloat(position.lat()); 
    var lng = parseFloat(position.lng()); 
    alert('lat,lng is: ' + (lat,lng)); 
    var latlng = new google.maps.LatLng(lat,lng); 
    alert('just before geocode'); 
    geocoder.geocode({'latLng': latlng}, function(results, status) 
    { 
     if (status == google.maps.GeocoderStatus.OK) 
     { 
      alert('in info_text If statement'); 
      if(results[1]) 
      { 
       alert('in inner if statement'); 
       var finalResult = myCallback(results[1].formatted_address); 
       return finalResult; 
      } 
      else 
      { 
       alert('no results found'); 
      } 
     } 
     else 
     { 
      alert('could not pinpoint location'); 
     } 

    }); 
} 

function myCallback(loc) 
{ 
    alert('i have a location!'); 
    return loc; 
} 

google.maps.event.addDomListener(window, 'load', initialize); 
+1

你好。你對如何在異步代碼中使用回調有一些誤解。我可以推薦一些[進一步閱讀](http://en.wikipedia.org/wiki/Callback_(computer_programming))?結果是你不能以你嘗試的方式從回調中返回一個值。 – Jivings

+0

@Jivings:謝謝你的回覆。如果我的方式無效,返回地址的最佳方式是什麼? – user1923

+0

您需要在回調函數中執行所需的操作。 – Jivings

回答

0

你的功能info_textreturn什麼,所以這行:

var pos = info_text(position); 

就是pos是不確定的。

您需要包括:

return something; 

在你的函數某些時候(像你再往下做)。

新增 你的功能myCallback返回一個值,但它被使用:

myCallback(results[1].formatted_address); 

它不存儲返回值的任何地方 - 它只是丟棄。

+0

我將myCallback(...)設置爲一個變量,然後在內部if語句中將其返回。所以雖然「未定義」pos沒有出現,但當我將鼠標懸停在標記上時,沒有任何信息框出現......任何建議爲什麼這是因爲content - >'hello'? – user1923

+0

你沒有在你的發佈代碼中將'myCallback()'設置爲一個變量,所以我有點迷路。 –

+0

我假設'geocoder.geocode'是一個AJAX調用,所以這個答案不會解決用戶問題。 – Jivings