2013-12-02 4 views
0
var longitude=1; 
var latitude=1; 

var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': Position}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
      alert(results[0].geometry.location.lat()); 
      alert(results[0].geometry.location.lng()); 
      latitude = results[0].geometry.location.lat(); 
      longitude = results[0].geometry.location.lng(); 
      //alert("location : " + results[0].geometry.location.lat() + " " +results[0].geometry.location.lng()); 
      } else { 
      alert("Something got wrong " + status); 
      } 
     }); 

Я пытаюсь изменить значения глобальных переменных по широте и долготе, но не в состоянии. Я искал способ присвоить значения глобальным переменным внутри функции, и я думаю, что я делаю эту часть правильно. Но, очевидно, есть кое-что, что мне не хватает. Пожалуйста помоги.Значение изменения глобальной переменной

+0

Предупреждения дают правильные результаты, но эти значения не присваиваются широте и долготе. –

ответ

1

function(results, status){ ... } бит асинхронный обратный вызов

вопрос вы, вероятно, работает в том, что вы пытаетесь получить доступ к значениям longitude и latitude, прежде чем они на самом деле установить

Чтобы подтвердить это, изменить свою обратную связь по следующему адресу:

// where you have these two lines 
latitude = results[0].geometry.location.lat(); 
longitude = results[0].geometry.location.lng(); 

// add this line after 
console.log(latitude, longitude); 

Вы должны увидеть их просто отлично. После того, как вы есть, что битную работу, вы можете пропустить их в целом и сделать что-то вроде этого

function doSomething(lat, lng) { 
    console.log(lat, lng); 
} 

geocoder.geocode({ 'address': Position}, function(results, status) { 

    // ... 
    var loc = results[0].geometry.location, 
     lat = loc.lat(), 
     lng = loc.lng(); 

    doSomething(lat, lng); 

    // ... 

}); 

Таким образом, вы можете пропустить имея latitude и longitude во внешней области видимости, тоже. Довольно удобно!

+0

Да, это действительно проблема. Должен ли я использовать функцию задержки для ожидания присвоения значений? –

+0

Вам не нужно искусственно * задерживать * что угодно, но вам нужно убедиться, что любая функция, которую вы вызываете, называется * в * обратном вызове Google Maps. –

+0

Удивительный! Благодарю. –

0

Я рекомендую вам прикрепить эти две переменные к глобальному объекту окна.

Нравится: window. latitude и window.longitude

И функция, пытающаяся изменить значение, - это функция обратного вызова асинхронного вызова, может быть локальная переменная с тем же именем, определенным в этой области.

Прикрепление к окну должно помочь вам в этом.

0

Попробуйте этот код:

var longitude=1; 
var latitude=1; 

var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': Position}, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) {   
      latitude = results[0].geometry.location.lat(); 
      longitude = results[0].geometry.location.lng(); 
      alert(latitude + ', ' + longitude) // show the value of the globals 
      } else { 
      alert("Something got wrong " + status); 
      } 
     }); 

Если это работает правильно, то ответ, вероятно, что Глобал являются быть правильно установлены, но они просто не были установлены во время другого кода пытается используй их.

Если это происходит, это означает, что любой код, используемый для lat/long, должен ждать завершения обработки и приема данных в режиме геокодирования.

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