2013-03-22 82 views
0

以服务于我的项目,我呼吁相同的服务,为超过2-3次,发现距离&时间使用cloudmode服务我在javascript路线。我有一个折线异步调用的JavaScript

,我得到的折线&经过连续的二点,以服务从它那里得到响应的每一个点。

我在做什么是

function showPointsRoutes(e) 
     { 
      var a = e.target.getLatLngs(); 
      for(var i = 1 ; i < a.length ; i++) 
      { 
      var as ="http://routes.cloudmade.com/BC9A493B41014CAABB98F0471D759707/api/0.3/" + a[i-1].lat+","+a[i-1].lng+","+a[i].lat+","+a[i].lng + "/car/shortest.js?callback=getRouteResponse"; 
      addScript(as); 
      } 
     } 


    function getRouteResponse(response) 
     { 
     mytimeArray.push[response.route_summary.total_time]; 
     myDistancArray.push[response.route_summary.total_distance]; 
     } 

    function addScript(url) 
     { 
      var script = document.createElement('script'); 
      script.type="text/javascript"; 
      script.src=url; 
      document.getElementsByTagName('head') [0].appendChild(script); 
     } 

但有时会发生什么是响应对于一些要求来得晚。由于这个我没有得到适当的时间点之间的距离。 任何人都可以提出某种方式,以便我可以获取数组中的值作为发出请求的顺序。

+0

您可以指定中转站,那么你只能做一个请求,在这里看到:http://developers.cloudmade.com/projects/routing-http-api/examples/find-route – 2013-03-22 12:26:18

+0

我没有任何这两点之间的中转点。 – 2013-03-22 12:48:11

+0

然后使用@Dark Falcon解决方案,似乎为我工作 – 2013-03-22 12:49:03

回答

1

他们给你不同的回调名称的原因是让你可以通过使用不同的回调每一个区分请求。尝试是这样的:

注:@Rodrigo阿西斯的建议是在这种情况下更好,因为API支持这一点。下面的代码演示了在API强制使用多个请求时处理此问题的一种方法。

function showPointsRoutes(e) 
{ 
    var a = e.target.getLatLngs(); 
    for(var i = 1 ; i < a.length ; i++) 
    requestRoute(i, a[i-1], a[i]); 
} 

function requestRoute(i, a, b) 
{ 
    window["getRouteResponse" + i] = function(response) 
    { 
    mytimeArray[i] = response.route_summary.total_time; 
    myDistancArray[i] = response.route_summary.total_distance; 
    }; 

    var as ="http://routes.cloudmade.com/BC9A493B41014CAABB98F0471D759707/api/0.3/" + a.lat+","+a.lng+","+b.lat+","+b.lng + "/car/shortest.js?callback=getRouteResponse" + i; 
    addScript(as); 
} 

function addScript(url) 
{ 
    var script = document.createElement('script'); 
    script.type="text/javascript"; 
    script.src=url; 
    document.getElementsByTagName('head') [0].appendChild(script); 
} 
+0

同样的事情发生。有些时候响应迟到了,所以值会被洗牌。 – 2013-03-22 13:01:12

+1

如果您使用我发布的代码,则这是不可能的。每个响应放在它自己的索引上,这个索引直接对应于源数据的索引。问题必须出现在您未发布的代码中。 – 2013-03-22 13:02:35

+0

我明白了。问题是当我试图显示它时,我试图直接从getRouteResponse函数中显示它,因为我得到了错误的顺序。 – 2013-03-22 13:18:07