2009-06-25 7 views
0

Unten ist mein Code. Das Problem ist, dass recordsOut [0] immer undefiniert ist, was auch immer ich versuche.Alle Ergebnisse eines asynchronen Anrufs können nicht mit geo.getLocations (Google Maps) erfasst werden.

Ich weiß, dass es mit dem Rückrufergebnis zu tun hat. Ich habe versucht, einige Verzögerungen hinzuzufügen, um mehr Zeit zu geben, um ein Ergebnis zurückzugeben, aber das hat nicht geholfen.

Irgendeine Idee (mit Beispiel bitte)? Sehr geschätzt.

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

Antwort

0

Stellen Sie sicher, dass Sie bereits recordsOut wie folgt definiert sind:

var recordsOut = []; 

Wenn Sie es so machen - var recordsOut; - es nicht definiert ist.

Wenn das für Sie nicht funktioniert, schreiben Sie bitte den Rest des Codes, damit wir genau sehen können, was vor sich geht.