for循环无法使用javascript加载地理代码中的最后一次迭代
在过去的两天里,我在javascript中使用地理代码时遇到了一个问题。我正在使用php从DB获取位置。我将数据传递给javascript变量。数据如下。我将此数据存储在变量“位置”中 我将位置传递给for循环,以获得在地图中绘制标记的纬度和经度。我正在使用以下函数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
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函数的gsetInterval
:@dystory抱歉。无法找到您。“您应该在此处使用标记”表示需要在该位置绘制标记?是的。当您调用初始标记(位置)
时,您不能立即使用标记,因为调用是异步的。您是否说函数名是问题所在?
<http://jsfiddle.net/frankvanpuffelen/xYvb6/2/>