2010-09-14 81 views
2

我需要訪問JavaScript變量:JavaScript的變量

var geocoder = new google.maps.Geocoder();

function geocodePosition(pos) {  
    geocoder.geocode({  
    latLng: pos  
    }, function(responses) { 
    if (responses && responses.length > 0) { 
     updateMarkerAddress(responses[0].formatted_address); 
    } else { 
     updateMarkerAddress('Cannot determine address at this location.'); 
    } 
    }); 
} 

function updateMarkerStatus(str) { 
    document.getElementById('markerStatus').innerHTML = str; 
} 

function updateMarkerPosition(latLng) { 
    document.getElementById('info').innerHTML = [ 
    latLng.lat(), 
    latLng.lng() 
    ].join(', '); 
} 

function updateMarkerAddress(str) { 
    document.getElementById('address').innerHTML = str; 
} 



function initialize() { 

    geocoder.geocode({ 'address': 'london'}, function(results, status) { 
    rr = results[0].geometry.location; 
}); 

var latLng = new google.maps.LatLng(rr); 

    var map = new google.maps.Map(document.getElementById('mapCanvas'), { 
    zoom: 8, 
    center: latLng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 
    var marker = new google.maps.Marker({ 
    position: latLng, 
    title: 'Point A', 
    map: map, 
    draggable: true 
    }); 

    // Update current position info. 
    updateMarkerPosition(latLng); 
    geocodePosition(latLng); 

    // Add dragging event listeners. 
    google.maps.event.addListener(marker, 'dragstart', function() { 
    updateMarkerAddress('Dragging...'); 
    }); 

    google.maps.event.addListener(marker, 'drag', function() { 
    updateMarkerStatus('Dragging...');  
    updateMarkerPosition(marker.getPosition()); 
    }); 

    google.maps.event.addListener(marker, 'dragend', function() { 
    updateMarkerStatus('Drag ended'); 
    geocodePosition(marker.getPosition()); 
    }); 


// Onload handler to fire off the app. 
google.maps.event.addDomListener(window, 'load', initialize);  

這是整個腳本,我需要得到附近的地址先這樣通過某種方式處理,以轉換爲ltlng

+0

@ user438755 - 請將您的代碼的每一行縮進4個空格,或者它未被格式化爲代碼。 – 2010-09-14 17:19:56

+0

@Peter - 那麼我整天寫的,使用2個空格,沒有格式化爲代碼? – Jakob 2010-09-14 17:23:55

+1

@Jakob [Nope](http://meta.stackexchange.com/questions/3122/formatting-sandbox/64504#64504)。 -----但它看起來像你經常[使用4個空格](http://stackoverflow.com/questions/3467820/xy-z5-how-are-parts-of-this-expression-called/3467922# 3467922)。 – 2010-09-14 18:31:14

回答

4

你必須訪問它或在回調的某處傳遞它,如下所示:

var rr;  
geocoder.geocode({ 'address': 'london'}, function(results, status) { 
    rr = results[0].geometry.location; 
    alert(rr);  
}); 

或者把它傳遞給另一個函數做額外的工作與數據:

geocoder.geocode({ 'address': 'london'}, function(results, status) { 
    anotherFunction(results[0].geometry.location); 
}); 

匿名的功能是爲geocode()函數的回調,這意味着它運行,所以rr是越來越設置alert()目前。

+0

所以當傳遞給一個函數時,我如何檢索第一個函數中的變量? – miojamo 2010-09-14 16:33:53

+0

@ user438755 - 在上面的第二個例子中,你會有另一個函數,'function anotherFunction(loc){alert(loc);例如,你可以用這個參數做任何你想做的事情,因爲這個函數將被調用...當服務器響應返回並且數據準備就緒時。 – 2010-09-14 16:35:16

+0

但我需要在geocoder.geocode只在外面的函數中訪問這個變量:var latLng = new google.maps.LatLng(rr); – miojamo 2010-09-14 16:40:33

0

該調用是異步的,這意味着geocoder.geocode將立即返回,並且只在您能夠訪問的匿名回調函數內部。

geocoder.geocode({ 'address': 'london'}, function(results, status) { 
    alert(results[0].geometry.location); 
}); 
+0

但我需要在外面得到結果如何做到這一點? – miojamo 2010-09-14 16:28:46

+0

你可能需要很多東西,這裏的問題是你不能擁有它們,直到它們可用,在你的情況下是匿名回調函數。因此,如果您想使用AJAX,您將不得不以事件爲導向調整您的思維方式和構建應用程序。 – 2010-09-14 17:50:49