For循环无法使用javascript在geocode中加载最后一次迭代

for loop fails to load the last iteration in geocode using javascript

本文关键字:geocode 加载 最后一次 迭代 javascript 循环 For      更新时间:2023-09-26

我面临一个问题,在javascript的地理代码的最后2天。我从DB使用php的位置。我将数据传递给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循环以获得纬度和经度,以便在map中绘制标记。我使用下面的函数

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个位置。在函数进入geocode函数之前,我得到了12个值。在地理编码之后,最后一个元素失败。I的顺序也变了。但对我来说不是问题。我的问题是无法获得最后一个位置的经纬度。也无法得到索引。我将这个下标值用于其他函数。索引值为停止在10。请帮忙解决这个问题

为了保留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); 

这样,您还可以摆脱其他参数…

注意在内部回调或从该回调调用的函数中使用标记(参见NOTE)。

As Per Frank van Puffelen这对我来说是正确的解决方案。非常感谢Frank van Puffelen

    <http://jsfiddle.net/frankvanpuffelen/xYvb6/2/>