for循环无法使用javascript加载地理编码中的最后一次迭代

时间:2014-07-22 13:39:18

标签: javascript google-maps

我在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中停止。请帮助解决此问题

2 个答案:

答案 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/>