我仍然有一些問題與JavaScript關閉和輸入/輸出變量。Javascript關閉與谷歌地理編碼器
我玩谷歌地圖API爲一個沒有盈利項目:用戶將標記放入一個gmap,我必須保存地方(座標)在我的分貝。
問題來了,當我需要做第二個地理編碼,以獲得一個位置的lat和lng的獨特配對:可以說兩個用戶將標記放置在同一個城鎮,但在不同的地方,我不想在數據庫中使用不同的座標兩次具有相同的位置。
我知道我可以後做第二個地理編碼用戶選擇的地方,但我想知道我是錯把這裏什麼:
// First geocoding, take the marker coords to get locality.
geocoder.geocode(
{
'latLng': new google.maps.LatLng($("#lat").val(), $("#lng").val()),
'language': 'it'
},
function(results_1, status_1){
// initialize the html var inside this closure
var html = '';
if(status_1 == google.maps.GeocoderStatus.OK)
{
// do stuff here
for(i = 0, geolen = results_1[0].address_components.length; i != geolen)
{
// Second type of geocoding: for each location from the first geocoding,
// i want to have a unique [lat,lan]
geocoder.geocode(
{
'address': results_1[0].address_components[i].long_name
},
function(results_2, status_2){
// Here come the problem. I need to have the long_name here, and
// 'html' var should increment.
coords = results_2[0].geometry.location.toUrlValue();
html += 'some html to let the user choose the locality';
}
);
}
// Finally, insert the 'html' variable value into my dom...
//but it never gets updated!
}
else
{
alert("Error from google geocoder:" + status_1)
}
}
);
我tryed有:
// Second type of geocoding: for each location from the first geocoding, i want
// to have a unique [lat,lan]
geocoder.geocode(
{
'address': results_1[0].address_components[i].long_name
},
(function(results_2, status_2, long_name){
// But in this way i'll never get results_2 or status_2, well, results_2
// get long_name value, status_2 and long_name is undefined.
// However, html var is correctly updated.
coords = results_2[0].geometry.location.toUrlValue();
html += 'some html to let the user choose the locality';
})(results_1[0].address_components[i].long_name)
);
並與:
// Second type of geocoding: for each location from the first geocoding, i want to have
// a unique [lat,lan]
geocoder.geocode(
{
'address': results_1[0].address_components[i].long_name
},
(function(results_2, status_2, long_name){
// But i get an obvious "results_2 is not defined" error (same for status_2).
coords = results_2[0].geometry.location.toUrlValue();
html += 'some html to let the user choose the locality, that can be more than one';
})(results_2, status_2, results_1[0].address_components[i].long_name)
);
任何建議嗎?
編輯:
我的問題是如何通過一個額外的參數傳遞給地理編碼器內部函數:
function(results_2, status_2, long_name){
//[...]
}
becose如果我這樣做了clousure,我惹的原始參數( results_2和status_2)
想到的第一件事是確保第二組回調甚至可以通過使用console.log來調用。另外,即使按順序運行第二組地理編碼,也不能保證函數回調將按順序運行。如果附加到html變量,它可能會失靈。只是想一想。 – 2011-02-23 22:05:00
是的,我刪除了所有的控制檯。在發佈代碼之前登錄。 無論如何,你對訂單問題的含義是什麼?我知道請求是異步的,但(我猜)第二個地理編碼是第一個,所以它不應該在第一個之前執行。我錯了嗎? – Strae 2011-02-23 22:07:42