我在javascript中使用地理编码过去2天遇到问题。我正在使用php从DB获取位置。我将数据传递给javascript变量。数据如下。我将这些数据存储在变量“locations”
中[['São Paulo, Brazil', 'Sky Ferreira @ Cine Joia - Sao Paulo, Brazil','314','15'],['Rua dos Ingleses, 209 - Morro dos Ingleses', 'Se Essa Rua Fosse Minha - Espetáculo de Brincar','1','31'],['São Bernardo do Campo - São Paulo, Brazil', 'Se Essa Rua Fosse Minha - Espetáculo de Brincar','2','31'],['Cine Joia - Praça Carlos Gomes, Se, São Paulo, Brazil', '::: LOBO + VESPAS MANDARINAS @ CINE JOIA :::','310','11'],['Rio de Janeiro, Centro, Rio, Brazil', '#GRIND - FESTA OFICIAL DE 16 ANOS @ALCA','315','16'],['Rua Vergueiro, Paraíso, São Paulo, Brazil', 'Se Essa Rua Fosse Minha - Espetáculo de Brincar','23','31'],['Clube da Aeronautica, Centro, Rio - Rio de Janeiro, Brazil', '#GRIND - BATALHA POP vs ROCK GARBAGE vs BRITNEY - DOMINGUEIRA MAIS ALTERNATIVA @ ALCA','316','35'],['Santa Catarina, Brazil', 'Nene no Cassino do Chacrinha! Djs Mauro Borges, Nene, Ricardo Motta.','317','36'],['Rua dos Ingleses, 209 - Morro dos Ingleses', 'St. Vincent - Brazilian Tour','308','31'],['Divinópolis - Minas Gerais, Brazil', 'LANCAMENTO OFICIAL DO NOVO CD DO MANEVA 5INCO CABEAS','309','10'],['Santa Catarina, Brazil', 'St. Vincent - Brazilian Tour','321','28'],['Rua Voluntários da Pátria, Santana, São Paulo, Brazil', 'St. Vincent - Brazilian Tour','320','29']]
我将位置传递给for循环以获取经度和经度来绘制地图中的标记。我正在使用以下功能
var markers = {};
function initial_markers(locations){
for(var i=0;i<locations.length;i++){
(function(address,attr_title,i,attr_id,cat_id) {
console.log(i);
geocoder.geocode({
'address': address
}, function(results) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
icon:"http://maps.google.com/mapfiles/ms/icons/blue.png"
});
markers[i] = marker;
console.log(i);
});
})(locations[i][0],locations[i][1],i,locations[i][2],locations[i][3]);
}
}
该数据中共有12个位置。在函数进入地理编码函数之前,我得到了12个值。在地理编码之后,它为最后一个元素失败了。我的顺序也改变了。但对我来说这不是问题。我的问题是无法获得最后一个位置的纬度和经度。而且也无法获得索引。我正在将此索引值用于其他一些功能。索引值在10中停止。请帮助解决此问题
答案 0 :(得分:0)
为了保留i,将其添加到内部函数参数:
(function(address,attr_title,i,attr_id,cat_id, i) {
console.log(i);
geocoder.geocode({
'address': address
}, function(results) {
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location,
icon:"http://maps.google.com/mapfiles/ms/icons/blue.png"
});
markers[i] = marker;
console.log(i);
// NOTE : you should use markers HERE
});
})(locations[i][0],locations[i][1],i,locations[i][2],locations[i][3], i);
这样,你也可以摆脱其他论点......
小心使用内部回调或从该回调调用的函数中的标记(参见注释)。
答案 1 :(得分:0)
Per Frank van Puffelen这对我来说是正确的解决方案。非常感谢Frank van Puffelen
<http://jsfiddle.net/frankvanpuffelen/xYvb6/2/>