2011-01-22 2 views
0

У меня есть небольшой скрипт, который получает местоположение из геосъемки ... Я хочу сохранить возвращенные координаты в переменной, которую я объявил глобально ... но по какой-то причине обратный вызов не читается Это. Как заставить обратный вызов использовать глобальную переменную?jquery callback не использует глобальную переменную

if(navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     myLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude); 
    }, function() { 
     noLocation(); 
    },{timeout: 20}); 
} 
else if (google.gears) { 
    var geo = google.gears.factory.create('beta.geolocation'); 
    geo.getCurrentPosition(function(position) { 
     myLocation = new google.maps.LatLng(position.latitude,position.longitude); 
    }, function() { 
     noLocation(); 
    }); 
} 
else { 
    noLocation(); 
} 
function noLocation() { 
$.getJSON("http://www.geoplugin.net/json.gp?id=117.201.92.17&jsoncallback=?", 
    function(data) { 
     if (data != "" && data.geoplugin_latitude != "") 
      myLocation = new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude) 
     else 
      myLocation = new google.maps.LatLng() 
    }); 

}

По какой-то причине я думаю, что его из-за асинхронный вызов ... Могу ли я получить по этому вопросу, как некоторые?

+0

Каких переменными вы говорите и что вы имеете в виду «это не будет читать»? – casablanca

ответ

2

Похоже, что он хранит его в глобальной переменной «myLocation». Однако, скорее всего, вы пытаетесь прочитать значение, прежде чем оно будет установлено. Способ работы асинхронного вызова заключается в том, что он немедленно возвращается, а затем в будущем он вызывает функцию обратного вызова, если и когда запрос получает ответ. Остальная часть вашего кода будет продолжать работать в то же время.

Попробуйте «предупреждение» после присвоения MyLocation, чтобы увидеть, если она заселяется:

myLocation = new google.maps.LatLng(data.geoplugin_latitude, data.geoplugin_longitude) 
alert(myLocation) 
+0

он заселен, но карты не показывают nethng, потому что я считаю, что, поскольку setCenter уже выполнен, карты api не знают, что показывать ... – Amit

+0

Amit - это похоже на API API Карт Google вопрос, чем «jquery callback не использует глобальную переменную». Обратный вызов действительно использует глобальную переменную. – Zach

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