2012-03-13 4 views
0

У меня есть глобальную переменную в JavaScript какОбновление глобальной переменной в JavaScript

var EventLocation = { 

     'center' : '35.59214,-121.046048', 
     'zoom' : 10 
}; 

теперь в функции мы обновляем эту переменную как

var geocoder = new google.maps.Geocoder(); 
    var address = $j('#EventLocation').text(); //record.Location; 

geocoder.geocode({ 'address': address}, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      var latitude = results[0].geometry.location.lat(); 
      var longitude = results[0].geometry.location.lng(); 

      EventLocation.center = new google.maps.LatLng(latitude, longitude); 

      //onSuccessMaps(latitude,longitude); 
     } else { 
      alert('Fail to find location'); 
     } 
    }); 

Но в другой функции EventLocation.center не обновляется, он принимает предыдущее значение как ('35.59214,-121.046048'). Как это разрешить?

+0

Где EventLocation определяется? Внутри файла или тега скрипта верхнего уровня или верхнего уровня? – Nathan

+0

Вы пытались изменить атрибут центра на объект latlng maps с начала? –

+0

try_ window.EventLocation.center = new google.maps.LatLng (широта, долгота); ' – Nemoy

ответ

0

Запрос на геокодирование является асинхронным, поэтому код будет продолжать работать в ожидании ответа. Фактически вам нужно вернуть элемент управления в браузер до того, как будет обработан ответ.

Это означает, что любой метод, который нуждается координаты должен вызываться из метода обратного вызова успеха:

geocoder.geocode({ 'address': address}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
    var latitude = results[0].geometry.location.lat(); 
    var longitude = results[0].geometry.location.lng(); 

    EventLocation.center = new google.maps.LatLng(latitude, longitude); 

    // here the coordinates _are_ set 

    // this is where you put the code that needs to use the coordinates 

    } else { 
    alert('Fail to find location'); 
    } 
}); 

// here the coordinates are _not_ set yet 
+0

@Ila: Это то же самое. Javascript строго одинарный, поэтому только один метод может работать одновременно. Вы должны выйти из всех других методов до того, как будет выполнен успешный обратный вызов. Любой код, который нуждается в координатах, возвращаемых из вызова геокода, должен войти в обратный вызов. Я добавил код выше. – Guffa

+0

@Ila: Нет ничего, что могло бы не допустить, чтобы ценность обновлялась глобально. Вы просто пытаетесь использовать его до его установки. – Guffa

+0

@Ila: Вы помещали код в обратный вызов? – Guffa

Смежные вопросы