2016-08-14 14 views
0

google geo-location apiを使用している間、数日間問題が発生しました。GoogleのJavascript APIを使用している問題

function codeAddress(address) { 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({"address": address}, function(results, status) { 
     if (status == "OK") { 
      return results[0].geometry.location; 
     } else { 
      return null; 
     } 
    }); 
} 

function generateJSON(origin, destination) { 
    var origin_loc = codeAddress(origin); 
    var dest_loc = codeAddress(destination); 
    .... 
} 

を「origin_loc」変数が戻って割り当てられていない来ていると私は、なぜデバッガを把握することができていない - これは私がしようとしてきたものです。コンソールに結果[0]を記録すると、オブジェクトが正常に戻ってきます。

これはなぜ起こっているのですか?

おかげ

+0

私はgoogleジオコーダが内部的にAJAXで動作すると思うので、非同期であるため、値を返すことはできません。http://stackoverflow.com/questions/14220321/how-do-i-return-the -response-from-asynchronous-call – yuriy636

+0

@ yuriy636 - ありがとう、それは私には良い推測のように思えます。最初はそれほど簡単ではありません! – sgpbyrne

+0

試した - codeAddress(起点).done(機能(応答){原点=応答;});しかし、それはcodeAddress関数を未定義にしています。 – sgpbyrne

答えて

0

これが最後に私のために働いていたものです - あなたの助けする@ yuriy636ため

function codeAddresses(addresses, callback) { 
    var coords = []; 
    for(var i = 0; i < addresses.length; i++) { 
     var geocoder = new google.maps.Geocoder(); 
     geocoder.geocode({'address':addresses[i]}, function (results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       coords.push(results[0].geometry.location); 
       if(coords.length == addresses.length) { 
        callback(coords); 
       } 
      } 
      else { 
       throw('No results found: ' + status); 
      } 
     }); 
    } 
} 

function generateJSON(origin, destination) { 
    var addresses = [origin, destination]; 
    codeAddresses(addresses, function(coords) { 
     var json = { ..... } 
     .... 
    }); 
} 

ありがとう!

関連する問題