Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
for循环无法使用javascript加载地理代码中的最后一次迭代_Javascript_Google Maps - Fatal编程技术网

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

for循环无法使用javascript加载地理代码中的最后一次迭代,javascript,google-maps,Javascript,Google Maps,在过去的两天里,我在javascript中使用地理代码时遇到了一个问题。我正在使用php从DB获取位置。我将数据传递给javascript变量。数据如下。我将此数据存储在变量“位置”中 我将位置传递给for循环,以获得在地图中绘制标记的纬度和经度。我正在使用以下函数 var markers = {}; function initial_markers(locations){ for(var i=0;i<locations.length;i++){ (functi

在过去的两天里,我在javascript中使用地理代码时遇到了一个问题。我正在使用php从DB获取位置。我将数据传递给javascript变量。数据如下。我将此数据存储在变量“位置”中

我将位置传递给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]);  
    }
}
var标记={};
功能初始_标记(位置){

对于(var i=0;i为了保留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); 
这样,您也可以摆脱其他参数


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

根据Frank van Puffelen的说法,这是我的正确解决方案。非常感谢Frank van Puffelen

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


为什么不在内部函数参数中添加i?@dystory如果我不添加此参数,它将在循环中失败。它只返回最后一个元素。您还需要检查回调函数的状态。对于某些请求,您很可能会得到
超过查询限制。
。您是如何尝试使用setTimeout函数的g
setInterval
:@dystory抱歉。无法找到您。“您应该在此处使用标记”表示需要在该位置绘制标记?是的。当您调用
初始标记(位置)
时,您不能立即使用
标记,因为调用是异步的。您是否说函数名是问题所在?
    <http://jsfiddle.net/frankvanpuffelen/xYvb6/2/>