2013-03-22 48 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