0

我使用谷歌的地理編碼/谷歌地圖api。我可以成功地地理編碼的位置,放置一個標記,但即時通訊有問題把經緯度/長在回調函數Java腳本回調修改變量 - Google api地理編碼

function init() { 
var latLng = new Array();//Setup the cities lat + long in array 

this.foo = 3; 

function addGeo(me){//call back function 
    me.foo = 2; 
return function (results, code){ 
    var marker = new google.maps.Marker({ 
     map: map, 
     position: results[0].geometry.location 
     }); 

    me.foo = 7; 
    this.foo = 8; 
    } 
} 

var geo = new google.maps.Geocoder(); 
geo.geocode({address: 'London', region: 'UK'}, addGeo(this)); 


var map = new google.maps.Map(document.getElementById("full_map")); 

var latLngBounds = new google.maps.LatLngBounds(); 

//For each city, add its location to the boundry and add a marker in that location 
for (var i = 0; i < latLng.length; i++) { 
    latLngBounds.extend(latLng[ i ]); 

} 

alert(this.foo); 

map.setCenter(latLngBounds.getCenter()); 
map.fitBounds(latLngBounds); 
map.setMapTypeId(google.maps.MapTypeId.TERRAIN); 

} 

這就是我的全部代碼之外的varible,我可以得到addGeo(回調函數)來編輯foo變量,但不在返回的函數中,這會提醒2(this.foo的值),我這樣做是爲了將lat和long存儲在latLong數組中,這樣我就可以使用google的latLngBounds。

任何幫助將不勝感激。

編輯:

對於任何intrested我把 me.latLngBounds.extend(結果[0] .geometry.location); me.map.fitBounds(latLngBounds); (在主要部分中設置相關變量之後) 在unamed函數中,它就像一個款待。

+0

如果API迫使您在回調中獲取返回的值而不是從函數返回,那麼您認爲沒有理由嗎? – SLaks 2010-11-08 13:30:06

回答

1

geocode方法是異步(所述在AJAX),這意味着它會立即返回,而無需等待來自服務器的應答。

因此,地理編碼回調僅在之後執行其餘代碼(服務器回覆時)。
在設置foo之前,您的alert(this.foo)會在您收到回覆之前運行。

您需要將使用響應的所有代碼移到回調中。

+0

這是否意味着我需要做其他事情,(存儲在DOM或XML文件等?) – akd5446 2010-11-08 13:30:25

+0

@akd:你明白髮生了什麼事? – SLaks 2010-11-08 13:31:36

+0

我想我是這樣做的,在回撥過程中移動它的問題是我需要對3-4個位置進行地理定位。 – akd5446 2010-11-08 13:34:43