2017-07-07 76 views
0

我想知道爲什麼這不起作用,它完美地記錄了Object {lat: 52.132633, lng: 5.291265999999999}。但done()函數中只有console.log()有效。爲了其他人不工作,而我返回確切的變量...JavaScript - 來自國家名稱的谷歌API lat/lng

function getLatLng() { 
    var LatLng; 
    $.ajax({ 
     url: 'https://maps.googleapis.com/maps/api/geocode/json?address=germany&sensor=false', 
     type: 'GET', 
     dataType: 'json', 
    }) 
    .done(function(data) { 
     LatLng = data.results[0]; 
     console.log(LatLng); 
    }) 
    return LatLng; 
} 

console.log(getLatLng()); 

我需要一些解決方法,這樣我可以讓initMap()功能的工作與我的lattitude和經度變量:

function getLatLng() { 
    var LatLng; 
    $.ajax({ 
     url: 'https://maps.googleapis.com/maps/api/geocode/json?address=germany&sensor=false', 
     type: 'GET', 
     dataType: 'json', 
    }) 
    .done(function(data) { 
     LatLng = data.results[0]; 
     console.log(LatLng); 
    }) 
    return LatLng; 
} 

console.log(getLatLng()); // undefined 

    function initMap() { 

    var styledMapType = new google.maps.StyledMapType(
     [], 
     {name: 'Styled Map'}); 

    var map = new google.maps.Map(document.getElementById('map'), { 
     center: {lat: latVal, lng: lngVal}, // error >>> undefined 
     zoom: 11, 
     mapTypeControlOptions: { 
     mapTypeIds: ['roadmap', 'satellite', 'hybrid', 'terrain', 
       'styled_map'] 
     } 
    }); 

    map.mapTypes.set('styled_map', styledMapType); 
    map.setMapTypeId('styled_map'); 
    } 
+0

已經嘗試'function findItem(){ var item; while(item_not_found){ //搜索 } return item; } var item = findItem();' –

+0

我更新了我的問題,希望它現在更清晰 –

+0

這是因爲'ajax.done()'在返回後執行。 –

回答

1

這是因爲調用google api是異步的。 這意味着外部控制檯日誌被執行,而谷歌的響應仍在等待處理。

你可以寫這樣的:

function getLatLng() { 
    return $.ajax({ 
     url: 'https://maps.googleapis.com/maps/api/geocode/json?address=germany&sensor=false', 
     type: 'GET', 
     dataType: 'json', 
    }); 
} 

getLatLng().done(function(data) { 
    var latlng = data.results[0]; 
    console.log(latlng); 
    //...further processing 
}); 

如果您需要訪問完成的功能外經緯度,你可以改寫爲這樣:

function getLatLngPromise() { 
    return new Promise(function(resolve) { 
     $.ajax({ 
      url: 'https://maps.googleapis.com/maps/api/geocode/json?address=germany&sensor=false', 
      type: 'GET', 
      dataType: 'json', 
     }).done(function(data) { 
      resolve(data); 
     }); 
    }); 
} 

async function getLatLng() { 
    var data = await getLatLngPromise(); 
    return data[0]; 
} 

var latlng = getLatLng(); 
console.log(latlng); 

或者你也可以參數化的initMap用latlng參數並將initMap調用移動到我的第一個示例的done函數。pastebin.com/VpSUma9R

+0

我需要訪問它以外的功能 –

+0

我更新了我的問題 –

+0

添加了異步示例 –