0

私はGoogle Maps APIに取り組んでいます。以下の関数が index++ の後に呼び出される理由がわかりません。私の知る限り、ReverseGeocode() を最初に呼び出す必要があります。その代わりに、最初にインクリメントしてから、問題を引き起こしている関数を呼び出します。アラート ボックスは記述どおりに表示されますが、中央の関数は関数の最後の行が実行された後に呼び出されます (index++)。

      function placeMarker(location)
      {
          alert("iiii");
          ReverseGeocode(location.lat(),location.lng());
          alert("jjjk");
          index++;
      }

これが私のReverseGeoCodeです

  function ReverseGeocode(lat,lng) {     
     var latlng = new google.maps.LatLng(lat, lng);
     geocoder.geocode({'latLng': latlng}, function(results, status)
  {
      if (status == google.maps.GeocoderStatus.OK) 
     {
           if (results[1])
      {

          places[index]=results[0].formatted_address;
          alert(places[index]+"index="+index);
          AddRow('table',results[0].formatted_address);
          document.getElementById("dataa").innerHTML+=results[0].formatted_address+"<br/>";
      }
  }
  else 
  {
    alert("Geocoder failed due to: " + status);
      }
    });
  }

説明してください。前もって感謝します。

4

2 に答える 2

1

アラートはコールバック関数内にありgeocoder.geocode、計算が終了すると実行されます。

geocoder.geocode非同期に見えます。通常、この手段geocoder.geocodeは、プログラムがそのローカルな結論に進み続ける間、別の場所で作業を続けます。geocoder.geocode後で終了すると、提供されたコールバック関数が実行されます。

于 2012-04-22T10:42:34.723 に答える
0

geocoder.geocodeは非同期だと思います。の値が増加したときに、後で匿名関数を実行しindexています。

function placeMarker(location)
 {
 alert("iiii")
 ReverseGeocode(location.lat(),location.lng(),index);
 alert("jjjk");
 index++;

    }

 

function ReverseGeocode(lat,lng,index) {     
     var latlng = new google.maps.LatLng(lat, lng);
     geocoder.geocode({'latLng': latlng}, function(results, status)
  {
      if (status == google.maps.GeocoderStatus.OK) 
     {
           if (results[1])
      {

          places[index]=results[0].formatted_address;
          alert(places[index]+"index="+index);
          AddRow('table',results[0].formatted_address);
          document.getElementById("dataa").innerHTML+=results[0].formatted_address+"<br/>";
      }
  }
  else 
  {
    alert("Geocoder failed due to: " + status);
      }
    });
  }

この場合、index無名関数のローカル スコープに入るため、上書きされません。

于 2012-04-22T10:49:17.153 に答える