Обратный вызов скрипта Java изменяет переменные - Google API Geocode - PullRequest
0 голосов
/ 08 ноября 2010

Я использую геокод Google / API Googlemap.Я могу успешно геокодировать местоположение и разместить маркер, однако у меня возникают проблемы с переводом lat / long в переменную вне функции обратного вызова

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);

}

Это мой полный код, я могу получить addGeo (функция обратного вызова) для редактирования переменной foo, но не в возвращаемой функции, это предупредит 2 (значение this.foo), я должен сделать это, чтобы сохранить значения lat и long в массиве latLong, чтобы я мог использовать googles latLngBounds.

Любая помощь будет принята с благодарностью.

РЕДАКТИРОВАТЬ:

Для всех, кто заинтересован, я ставлю me.latLngBounds.extend (results [0] .geometry.location);me.map.fitBounds (LatLngBounds);(после установки соответствующих переменных в главном разделе) в функции unamed, и она работает как удовольствие.

1 Ответ

1 голос
/ 08 ноября 2010

Метод geocode является асинхронным ( A в AJAX), что означает, что он вернется немедленно, не ожидая ответа от сервера.

Следовательно, обратный вызов геокода выполняется только после остальной части вашего кода (когда сервер отвечает).
Ваш alert(this.foo) запускается до того, как вы получите ответ, до установки foo.

Вам нужно переместить весь код, который использует ответ, в обратный вызов.

...