2009-06-25 7 views
0

以下は私のコードです。問題はrecordsOut [0]は私が何をしようとも定義されていないことです。geo.getLocations(Googleマップ)で非同期呼び出しの結果を収集できません

私はそれがコールバックの結果と関係があることを知っています。私はいくつかの遅れを加えて、結果を返す時間を増やそうとしましたが、それは助けになりませんでした。

どのようなアイデア(例を挙げてください)?非常に高く評価。

function getAddress(id, searchValue) { 
    geo.getLocations(searchValue, function(result) { 
     if (result.Status.code == G_GEO_SUCCESS) { 
      var recordsOutStr = id + ';' + searchValue + ';'; 
      for (var j = 0; j < result.Placemark.length; j++) 
       recordsOutStr += result.Placemark[j].address + ';' + result.Placemark[j].Point.coordinates[0] + ';' + result.Placemark[j].Point.coordinates[1]; 
      recordsOut.push(recordsOutStr); 
      alert(recordsOutStr); 
     } 
     else { 
      var reason = "Code " + result.Status.code; 
      if (reasons[result.Status.code]) 
       reason = reasons[result.Status.code] 
      alert('Could not find "' + searchValue + '" ' + reason); 
     } 
    }); 
} 

function delay(ms) 
{ 
    var date = new Date(); 
    var curDate = null; 
    do 
    { 
    curDate = new Date(); 
    } 
    while (curDate - date < ms); 
} 

function processData() 
{ 
    objDataIn = document.getElementById("dataIn"); 
    objDataOut = document.getElementById("dataOut"); 

    if (objDataIn != null) 
    { 
     //alert(objDataIn.value); 
     if (objDataOut != null) { 

      recordsIn = explode(objDataIn.value, ';', true); 
      //for (i = 0; i < recordsIn.length; i++) 
      for (i = 0; i <= 5; i++) 
      { 
       addressStr = recordsIn[i]['address'] + ', ' + 
          recordsIn[i]['postalcode'] + ' ' + 
          recordsIn[i]['city'] + ', ' + 
          recordsIn[i]['country']; 
       getAddress(recordsIn[i]['id'], addressStr); //This will set resultStr 
       delay(200); 
      } 
      delay(5000); 
      alert('***' + recordsOut[0] + '***'); 
      alert('***' + recordsOut[1] + '***'); 
      alert('***' + recordsOut[2] + '***'); 
      alert('***' + recordsOut[3] + '***'); 
      alert('***' + recordsOut[4] + '***'); 
     } 
    } 
    document.frmGeoCoder.submit(); 
} 

答えて

0

あなたはすでにこのようrecordsOutが定義されていることを確認してください:あなたはこのようにそれを行う場合

var recordsOut = []; 

からvar recordsOut; - それは不定となります。

これがうまくいかない場合は、残りのコードを投稿してください

関連する問題