我想使用谷歌地理編碼器API V3根據用戶指定的地址在地圖上繪製位置,代碼如下。谷歌地圖地理編碼API V3不返回結果在JavaScript函數
當我直接發出請求(例如到http://maps.googleapis.com/maps/api/geocode/json?address=peterborough&sensor=false)時,我收到了預期的響應。但是,使用下面的代碼發出相同的請求時,getLatLong函數退出後,變量中點始終未定義。
我在做什麼不正確?
function loadFromSearch(address)
{
midpoint = getLatLong(address);
mapCentre = midpoint;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
function getLatLong(address)
{
var result;
var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
$.getJSON(url,
function (data){
if (data.status == "OK")
{
result = data.results[0].geometry.location;
}
});
return result;
}
=========================================== =======================================
根據反應,我有現在將代碼更新爲以下內容。我仍然沒有得到任何結果,但在Firebug中設置了斷點result = data.results [0] .geometry.location;永遠不會被擊中。
function loadFromSearch(address)
{
midpoint = getLatLong(address, loadWithMidpoint);
}
function getLatLong(address, callback)
{
var result;
var url = 'http://maps.googleapis.com/maps/api/geocode/json?address=' + encodeURIComponent(address) + '&sensor=false'
$.getJSON(url,{},
function (data) {
if (data.status == "OK")
{
result = data.results[0].geometry.location;
callback(result);
}
});
}
function loadWithMidpoint(centre)
{
mapCentre = centre;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
=========================================== ==================================
我擁有它!最終的代碼如下所示:
function loadFromSearch(coordinates, address)
{
midpoint = getLatLong(address, latLongCallback);
}
function getLatLong(address, callback)
{
var geocoder = new google.maps.Geocoder();
var result = "";
geocoder.geocode({ 'address': address, 'region': 'uk' }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK)
{
result = results[0].geometry.location;
latLongCallback(result);
}
else
{
result = "Unable to find address: " + status;
}
});
return result;
}
function latLongCallback(result)
{
mapCentre = result;
map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
...
}
感謝Brady,已經嘗試了這種方法,但結果仍然不會返回與初始化值不同的值。 – Jason 2010-11-09 13:45:58
@jibberish - 你必須有其他地方出了問題,因爲如果我運行getLatLong(「約克」)它返回53.9577018,-1.0822855 – Brady 2010-11-09 13:55:46
我必須的。我可以直接在調試器中找到geocoder.geocode行,然後直接跳過函數調用返回。我猜會繼續堵塞! – Jason 2010-11-09 14:03:09