0

私のプロジェクトでは、cloudmodeサービスを使用してjavascriptでルートの距離と時間を見つけるために、同じサービスを2〜3回以上呼び出しています。

ポリラインが1つあり、ポリラインの各ポイントを取得し、2つの連続するポイントをサービスに渡して応答を取得しています。

私がしているのは

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);
        }

ただし、一部のリクエストへの応答が遅れることがあります。このため、ポイント間の適切な時間と距離が得られません。リクエストが行われたシーケンスとして配列の値を取得するために、誰かが何らかの方法を提案できますか?

4

1 に答える 1

1

異なるコールバック名が付けられている理由は、リクエストごとに異なるコールバックを使用してリクエストを区別できるようにするためです。次のようなことを試してください:

注: API がこれをサポートしているため、この場合は @Rodrigo Assis の提案の方が適切です。以下のコードは、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);
}
于 2013-03-22T12:22:28.520 に答える