2013-12-09 80 views
0

在我的页面上,我使用MaxMind来填充用户long/lat。延迟运行javascript for循环

我还使用脚本(包含haversine公式)将用户长/纬度并将距离参数分配给与商店位置相关的对象。

一旦距离已经存储我想运行下面的循环

for(i=0; i<cities.length; i++){ 
    var newLat = cities[i].lat; 
    var newLon = cities[i].lon; 
    getDistanceFromLatLonInKm(userLat,userLon,newLat,newLon); 
    var lowest = 1000 
    if(cities[i].distance< lowest){lowest = cities[i].distance} 
} 

    cities.sort(function(a, b) { 
    return a.distance - b.distance; 
    })[0] 
     var div = document.getElementById('test'); 
      if(cities[0].fax == null){ 
       div.innerHTML = div.innerHTML + cities[0].street + '<br />' + cities[0].city + '<br />' + cities[0].postal + '<br /><b>Phone:</b>' + cities[0].phone; 
      }else{div.innerHTML = div.innerHTML + cities[0].street + '<br />' + cities[0].city + '<br />' + cities[0].postal + '<br /><b>Phone:</b>' + cities[0].phone + '<br /><b>Fax:</b>' + cities[0].fax; 

      } 

的唯一的事情是,既然有显示出来的坐标的延迟,循环不能运行的时候了。 如何在坐标填充后运行此循环?

+0

你能分享获取经纬度的代码吗?你可以有一个构造,你可以在获取纬度的功能中包含for循环。如果经纬度为 ,如果lat和long =实际值,{for循环} –

回答

1

可以使用setTimeout功能,如:

setTimeout(function() { yourCode... }, 5000); 

然而,这是很少得到妥善解决。相反,你应该查看你的数据源的API,它可能有一个回调函数,你可以使用它来获得可用数据的通知。这是等待数据的正确方法。如果没有这种方式,则必须使用setTimeout(实际上,如果在进入延迟代码时数据不可用,则再次调用它)。

+0

我会看看文档,但这对我所需要的非常有用。谢谢! –